Models require training, a process that typically involves feeding in a set of features with known labels. During training, the model makes inferences based on these features, and the labels are used to adjust the model’s weights.
A training set consists of a single label paired with one or more features. Below is an example of registering a training set named “fraud_training” with the variant “quickstart.” It comprises the “fraudulent/quickstart” label and a single feature “avg_transactions/quickstart.”
@ff.entityclass User: avg_transactions = ff.Feature( average_user_transaction[["CustomerID", "TransactionAmount"]], variant="quickstart", type=ff.Float32, inference_store=redis, timestamp_column="timestamp", ) fraudulent = ff.Label( transactions[["CustomerID", "IsFraud"]], variant="quickstart", type=ff.Bool, timestamp_column="timestamp", )ff.register_training_set( "fraud_training", "quickstart", label=("fraudulent", "quickstart"), features=[("avg_transactions", "quickstart")],)client.apply()# The training set's feature values will be point-in-time correct.ts = client.training_set("fraud_training", "quickstart").dataframe()
How a Label gets joined With Features into a Training Set
Training sets are constructed by pairing features and labels using their entity key. The process involves looping through the labels and, for each feature, selecting the row with the same entity key as the label. To create point-in-time correct training sets, the feature value is obtained from the row with a timestamp closest to, but less than, the label timestamp. This ensures that the feature value aligns with the label’s time.
Every training set can be directly retrieved as a Dataframe. This approach is suitable for small datasets or when working with Dataframe-based training systems like Databricks. It offers ease and flexibility in handling training sets.
For larger training sets that do not fit into memory or when distributed Dataframes are not viable, you can iterate through them using mini-batches.
import featureform as ffclient = ff.Client(host)dataset = client.training_set(name, variant).repeat(5).shuffle(1000).batch(64)for feature_batch, label_batch in dataset: # Run through a shuffled dataset 5 times in batches of 64
{"docsConfig":{"$schema":"https://mintlify.com/docs.json","theme":"mint","name":"Featureform","colors":{"primary":"#F7195C","light":"#FF487F","dark":"#F7195C"},"favicon":"/favicon.svg","logo":{"light":"https://mintcdn.com/featureform/ge8yI-LRr4sD_ybq/logo.svg?fit=max\u0026auto=format\u0026n=ge8yI-LRr4sD_ybq\u0026q=85\u0026s=5c92640b0314272fdcf5f4061e3d2ae9","dark":"https://mintcdn.com/featureform/ge8yI-LRr4sD_ybq/logo.svg?fit=max\u0026auto=format\u0026n=ge8yI-LRr4sD_ybq\u0026q=85\u0026s=5c92640b0314272fdcf5f4061e3d2ae9"},"navbar":{"links":[{"label":"Schedule a Demo","href":"https://calendly.com/d/y5h-jpf-gj7/featureform-intro-call-intro-call"}],"primary":{"type":"button","label":"Quickstart","href":"https://docs.featureform.com/"}},"footer":{"socials":{"twitter":"https://twitter.com/FeatureformML","linkedin":"https://www.linkedin.com/company/featureform-ml"}},"navigation":{"global":{"tabs":[{"tab":"Python SDK","href":"https://sdk.featureform.com/"}],"anchors":[{"anchor":"Community","href":"https://join.slack.com/t/featureform-community/shared_invite/zt-xhqp2m4i-JOCaN1vRN2NDXSVif10aQg","icon":"slack"},{"anchor":"Github","href":"https://github.com/featureform","icon":"github"}]},"pages":[]}},"deployment":{"deploymentMetadataValue":{"subdomain":"featureform","hasAudioNarration":false,"actualSubdomain":"featureform","customDomains":["docs.featureform.com"],"gitSource":{"type":"github","owner":"featureform","repo":"featureform","deployBranch":"main","contentDirectory":"docs","isPrivate":false,"mountPath":"","label":""},"chroma":{"liveDeploymentHistoryId":"6a21e60d4c43fec466d7927a","collectionId":"2efa229a-a369-473e-ab0d-8a6bc8ff186b","schemaVersion":"v2"},"entitlements":{"AI_CHAT":{"status":"ENABLED"},"WEB_MCP":{"status":"ENABLED"},"NARRATION":{"status":"ENABLED"}},"buildId":"6ae91d2a5d9fe27156016933:success","clientVersion":"0.0.4054","searchFilterCounts":[{"language":"default","tag":"Documentation","count":69},{"language":"default","tag":"Supported Infrastructure Providers","count":26},{"language":"default","tag":"Overview","count":13},{"language":"default","tag":"Concepts","count":12},{"language":"default","tag":"Using Featureform","count":10},{"language":"default","tag":"Offline Stores","count":10},{"language":"default","tag":"Featureform Resource Types","count":9},{"language":"default","tag":"Deployment","count":7},{"language":"default","tag":"Inference Stores","count":5},{"language":"default","tag":"Object and File Stores","count":5}]},"assistantConfig":{},"basePath":"","hasChatPermissions":true,"hasWebMcpPermissions":true,"toggles":[{"name":"kill-isr","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-mintlify-slack","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-integrations-settings","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-pr-grouping","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"custom-prefix","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"analytics-v7","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"user-flows-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"no-publish-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-onboarding","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"llms-txt-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving-live","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"stripTemperatureMiddleware","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"support-platform-pylon-zendesk","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"instant-rollback","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications-server","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-fable","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fixed-ai-action-pricing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automation-resolve-merge-conflict","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"scoped-publishing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"mintql","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"page-level-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-version-history-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"billing-page-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"full-page-search","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workspace-projects","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"assistant-v5","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"byok-sep-25","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fork-pr-previews","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"revalidation-jwt","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"vite-origin","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"billing-updated-9-15","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-sso-scim","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"hobby-abuse-scan","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"dashboard-inbox","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-signup","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"turbopuffer-dual-write","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-enabled","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"approve-review-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"sso-setup-deadline-banner","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"rbac-expansion","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false}],"googleFontsInlined":false},"customCss":[],"page":{"pagePath":"abstractions/training-set","slug":"/abstractions/training-set","pageMetadata":{"title":"Training Sets","description":"Models require training, a process that typically involves feeding in a set of [features](/abstractions/feature) with known [labels](/abstractions/label). During training, the model makes inferences based on these features, and the labels are used to adjust the model's weights.","href":"/abstractions/training-set"},"description":{"compiledSource":"\"use strict\";\nconst {jsx: _jsx, jsxs: _jsxs} = arguments[0];\nconst {useMDXComponents: _provideComponents} = arguments[0];\nfunction _createMdxContent(props) {\n const _components = {\n a: \"a\",\n p: \"p\",\n ..._provideComponents(),\n ...props.components\n };\n return _jsxs(_components.p, {\n children: [\"Models require training, a process that typically involves feeding in a set of \", _jsx(_components.a, {\n href: \"/abstractions/feature\",\n children: \"features\"\n }), \" with known \", _jsx(_components.a, {\n href: \"/abstractions/label\",\n children: \"labels\"\n }), \". During training, the model makes inferences based on these features, and the labels are used to adjust the model’s weights.\"]\n });\n}\nfunction MDXContent(props = {}) {\n const {wrapper: MDXLayout} = {\n ..._provideComponents(),\n ...props.components\n };\n return MDXLayout ? _jsx(MDXLayout, {\n ...props,\n children: _jsx(_createMdxContent, {\n ...props\n })\n }) : _createMdxContent(props);\n}\nreturn {\n default: MDXContent\n};\n","frontmatter":{},"scope":{}},"pageType":"default","mdx":{"mdxSource":{"compiledSource":"\"use strict\";const{Fragment:_Fragment,jsx:_jsx,jsxs:_jsxs}=arguments[0];const{useMDXComponents:_provideComponents}=arguments[0];function _createMdxContent(props){const _components={a:`a`,code:`code`,p:`p`,pre:`pre`,span:`span`,..._provideComponents(),...props.components},{CodeBlock,Heading}=_components;if(!CodeBlock)_missingMdxReference(`CodeBlock`,true);if(!Heading)_missingMdxReference(`Heading`,true);return _jsxs(_Fragment,{children:[_jsx(Heading,{level:`2`,id:`anatomy-of-a-training-set`,children:`Anatomy of a Training Set`}),`\n`,_jsxs(_components.p,{children:[`A training set consists of a single label paired with one or more features. Below is an example of registering a training set named “fraud_training” with the `,_jsx(_components.a,{href:`/concepts/versioning-and-variants`,children:`variant`}),` “quickstart.” It comprises the “fraudulent/quickstart” label and a single feature “avg_transactions/quickstart.”`]}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`27`,language:`python`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`python`,children:_jsxs(_components.code,{language:`python`,numberOfLines:`27`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:`@ff.entity`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:`class`}),_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#4EC9B0`},children:` User`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`:`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` avg_transactions `}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`=`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` ff.Feature(`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` average_user_transaction[[`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"CustomerID\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`, `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"TransactionAmount\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`]],`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#9CDCFE`},children:` variant`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`=`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"quickstart\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#9CDCFE`},children:` type`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`=`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`ff.Float32,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#9CDCFE`},children:` inference_store`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`=`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`redis,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#9CDCFE`},children:` timestamp_column`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`=`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"timestamp\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` )`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` fraudulent `}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`=`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` ff.Label(`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` transactions[[`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"CustomerID\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`, `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"IsFraud\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`]],`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#9CDCFE`},children:` variant`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`=`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"quickstart\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#9CDCFE`},children:` type`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`=`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`ff.Bool,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#9CDCFE`},children:` timestamp_column`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`=`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"timestamp\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` )`})}),`\n`,_jsx(_components.span,{className:`line`}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`ff.register_training_set(`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"fraud_training\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"quickstart\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#9CDCFE`},children:` label`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`=`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`(`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"fraudulent\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`, `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"quickstart\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`),`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#9CDCFE`},children:` features`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`=`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`[(`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"avg_transactions\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`, `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"quickstart\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`)],`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`)`})}),`\n`,_jsx(_components.span,{className:`line`}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`client.apply()`})}),`\n`,_jsx(_components.span,{className:`line`}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#6E7781`,\"--shiki-dark\":`#6A9955`},children:`# The training set's feature values will be point-in-time correct.`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`ts `}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`=`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` client.training_set(`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"fraud_training\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`, `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"quickstart\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`).dataframe()`})]}),`\n`]})})}),`\n`,_jsx(Heading,{level:`2`,id:`how-a-label-gets-joined-with-features-into-a-training-set`,children:`How a Label gets joined With Features into a Training Set`}),`\n`,_jsxs(_components.p,{children:[`Training sets are constructed by pairing `,_jsx(_components.a,{href:`/abstractions/feature`,children:`features`}),` and `,_jsx(_components.a,{href:`/abstractions/label`,children:`labels`}),` using their `,_jsx(_components.a,{href:`/abstractions/entity`,children:`entity`}),` key. The process involves looping through the labels and, for each feature, selecting the row with the same entity key as the label. To create `,_jsx(_components.a,{href:`/concepts/point-in-time-correctness-historical-features-timeseries-data`,children:`point-in-time correct training sets`}),`, the feature value is obtained from the row with a timestamp closest to, but less than, the label timestamp. This ensures that the feature value aligns with the label’s time.`]}),`\n`,_jsx(Heading,{level:`2`,id:`working-with-training-sets`,children:`Working with Training Sets`}),`\n`,_jsx(Heading,{level:`3`,id:`using-dataframes`,children:`Using Dataframes`}),`\n`,_jsx(_components.p,{children:`Every training set can be directly retrieved as a Dataframe. This approach is suitable for small datasets or when working with Dataframe-based training systems like Databricks. It offers ease and flexibility in handling training sets.`}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`1`,language:`python`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`python`,children:_jsxs(_components.code,{language:`python`,numberOfLines:`1`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`ts `}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`=`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` client.training_set(`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"fraud_training\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`, `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"quickstart\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`).dataframe()`})]}),`\n`]})})}),`\n`,_jsx(Heading,{level:`3`,id:`using-mini-batches`,children:`Using Mini Batches`}),`\n`,_jsx(_components.p,{children:`For larger training sets that do not fit into memory or when distributed Dataframes are not viable, you can iterate through them using mini-batches.`}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`6`,language:`python`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`python`,children:_jsxs(_components.code,{language:`python`,numberOfLines:`6`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:`import`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` featureform `}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:`as`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` ff`})]}),`\n`,_jsx(_components.span,{className:`line`}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`client `}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`=`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` ff.Client(host)`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`dataset `}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`=`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` client.training_set(name, variant).repeat(`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#B5CEA8`},children:`5`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`).shuffle(`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#B5CEA8`},children:`1000`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`).batch(`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#B5CEA8`},children:`64`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`)`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:`for`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` feature_batch, label_batch `}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:`in`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` dataset:`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#6E7781`,\"--shiki-dark\":`#6A9955`},children:` # Run through a shuffled dataset 5 times in batches of 64`})}),`\n`]})})})]})}function MDXContent(props={}){const{wrapper:MDXLayout}={..._provideComponents(),...props.components};return MDXLayout?_jsx(MDXLayout,{...props,children:_jsx(_createMdxContent,{...props})}):_createMdxContent(props)}return{default:MDXContent};function _missingMdxReference(id,component){throw new Error(`Expected `+(component?`component`:`object`)+\" `\"+id+\"` to be defined: you likely forgot to import, pass, or provide it.\")}","frontmatter":{},"scope":{"config":{},"pageMetadata":{"title":"Training Sets","description":"Models require training, a process that typically involves feeding in a set of [features](/abstractions/feature) with known [labels](/abstractions/label). During training, the model makes inferences based on these features, and the labels are used to adjust the model's weights.","href":"/abstractions/training-set"}}},"mdxSourceWithNoJs":null},"mdxExtracts":{"tableOfContents":[{"title":"Anatomy of a Training Set","slug":"anatomy-of-a-training-set","depth":2,"children":[]},{"title":"How a Label gets joined With Features into a Training Set","slug":"how-a-label-gets-joined-with-features-into-a-training-set","depth":2,"children":[]},{"title":"Working with Training Sets","slug":"working-with-training-sets","depth":2,"children":[{"title":"Using Dataframes","slug":"using-dataframes","depth":3,"children":[]},{"title":"Using Mini Batches","slug":"using-mini-batches","depth":3,"children":[]}]}],"codeExamples":{}},"jsLinks":[],"subdomain":"featureform","siteName":"Featureform","title":"Training Sets - Featureform","navMaps":{"firstHrefInVersion":{},"firstHrefInLanguage":{}},"lastModified":"2026-01-06T23:45:37.568Z","originalFileLocation":"abstractions/training-set.mdx"},"headHtml":"\u003cscript data-mint-head>(function(){var d=document.documentElement,p=null;if(!p){try{p=localStorage.getItem(\"isDarkMode\")}catch(e){}if(p==='true')p='dark';else if(p==='false')p='light';if(p!=='light'\u0026\u0026p!=='dark'\u0026\u0026p!=='system')p=\"system\"}var r=p==='system'?(matchMedia(\"(prefers-color-scheme: dark)\").matches?'dark':'light'):p;d.classList.remove(r==='dark'?'light':'dark');d.classList.add(r);d.setAttribute(\"data-theme-preference\",p)})();\u003c/script>\u003cmeta data-mint-head name=\"description\" content=\"Models require training, a process that typically involves feeding in a set of features with known labels. During training, the model makes inferences based on these features, and the labels are used to adjust the model\u0026#x27;s weights.\">\u003cmeta data-mint-head name=\"application-name\" content=\"Featureform\">\u003cmeta data-mint-head name=\"generator\" content=\"Mintlify\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/featureform/v0loGK3GrZwZX3jL/_generated/favicon/android-chrome-192x192.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"apple-touch-icon\" type=\"image/png\" sizes=\"180x180\" href=\"/mintlify-assets/_mintlify/favicons/featureform/v0loGK3GrZwZX3jL/_generated/favicon/apple-touch-icon.png\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/featureform/v0loGK3GrZwZX3jL/_generated/favicon/favicon-16x16.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/mintlify-assets/_mintlify/favicons/featureform/v0loGK3GrZwZX3jL/_generated/favicon/favicon-32x32.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/mintlify-assets/_mintlify/favicons/featureform/v0loGK3GrZwZX3jL/_generated/favicon/favicon.ico\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/featureform/v0loGK3GrZwZX3jL/_generated/favicon-dark/android-chrome-192x192.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/featureform/v0loGK3GrZwZX3jL/_generated/favicon-dark/favicon-16x16.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/mintlify-assets/_mintlify/favicons/featureform/v0loGK3GrZwZX3jL/_generated/favicon-dark/favicon-32x32.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/mintlify-assets/_mintlify/favicons/featureform/v0loGK3GrZwZX3jL/_generated/favicon-dark/favicon.ico\" media=\"(prefers-color-scheme: dark)\">\u003cmeta data-mint-head property=\"og:title\" content=\"Training Sets - Featureform\">\u003cmeta data-mint-head property=\"og:description\" content=\"Models require training, a process that typically involves feeding in a set of features with known labels. During training, the model makes inferences based on these features, and the labels are used to adjust the model\u0026#x27;s weights.\">\u003cmeta data-mint-head property=\"og:site_name\" content=\"Featureform\">\u003cmeta data-mint-head property=\"og:url\" content=\"https://docs.featureform.com/abstractions/training-set\">\u003cmeta data-mint-head property=\"og:type\" content=\"website\">\u003cmeta data-mint-head property=\"og:image\" content=\"https://featureform.mintlify.app/_mintlify/api/og/v2?division=Featureform+Resource+Types\u0026amp;title=Training+Sets\u0026amp;description=Models+require+training%2C+a+process+that+typically+involves+feeding+in+a+set+of+%5Bfeatures%5D%28%2Fabstractions%2Ffeature%29+with+known+%5Blabels%5D%28%2Fabstractions%2Flabel%29.+Durin\u0026amp;theme=e5c0967714b515882258126f\u0026amp;signature=0e1bb16829fcfc052fd097d127e4bf38c50357801de2a1f170b1282aa4c065df\">\u003cmeta data-mint-head property=\"og:image:width\" content=\"1200\">\u003cmeta data-mint-head property=\"og:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"twitter:card\" content=\"summary_large_image\">\u003cmeta data-mint-head name=\"twitter:title\" content=\"Training Sets - Featureform\">\u003cmeta data-mint-head name=\"twitter:description\" content=\"Models require training, a process that typically involves feeding in a set of features with known labels. During training, the model makes inferences based on these features, and the labels are used to adjust the model\u0026#x27;s weights.\">\u003cmeta data-mint-head name=\"twitter:image\" content=\"https://featureform.mintlify.app/_mintlify/api/og/v2?division=Featureform+Resource+Types\u0026amp;title=Training+Sets\u0026amp;description=Models+require+training%2C+a+process+that+typically+involves+feeding+in+a+set+of+%5Bfeatures%5D%28%2Fabstractions%2Ffeature%29+with+known+%5Blabels%5D%28%2Fabstractions%2Flabel%29.+Durin\u0026amp;theme=e5c0967714b515882258126f\u0026amp;signature=0e1bb16829fcfc052fd097d127e4bf38c50357801de2a1f170b1282aa4c065df\">\u003cmeta data-mint-head name=\"twitter:image:width\" content=\"1200\">\u003cmeta data-mint-head name=\"twitter:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"msapplication-config\" content=\"/mintlify-assets/_mintlify/favicons/featureform/v0loGK3GrZwZX3jL/_generated/favicon/browserconfig.xml\">\u003cmeta data-mint-head name=\"apple-mobile-web-app-title\" content=\"Featureform\">\u003cmeta data-mint-head name=\"msapplication-TileColor\" content=\"#F7195C\">\u003clink data-mint-head rel=\"canonical\" href=\"https://docs.featureform.com/abstractions/training-set\">\u003clink data-mint-head rel=\"alternate\" type=\"application/xml\" href=\"/sitemap.xml\">\u003clink data-mint-head rel=\"alternate\" type=\"text/markdown\" href=\"/abstractions/training-set.md\">\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@graph\":[{\"@type\":\"Organization\",\"@id\":\"https://docs.featureform.com/#organization\",\"name\":\"Featureform\",\"url\":\"https://docs.featureform.com\",\"logo\":{\"@type\":\"ImageObject\",\"url\":\"https://mintcdn.com/featureform/ge8yI-LRr4sD_ybq/logo.svg?fit=max\u0026auto=format\u0026n=ge8yI-LRr4sD_ybq\u0026q=85\u0026s=5c92640b0314272fdcf5f4061e3d2ae9\"}},{\"@type\":\"WebSite\",\"@id\":\"https://docs.featureform.com#website\",\"name\":\"Featureform\",\"url\":\"https://docs.featureform.com\",\"publisher\":{\"@id\":\"https://docs.featureform.com/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https://docs.featureform.com/abstractions/training-set#webpage\",\"url\":\"https://docs.featureform.com/abstractions/training-set\",\"name\":\"Training Sets\",\"description\":\"Models require training, a process that typically involves feeding in a set of features with known labels. During training, the model makes inferences based on these features, and the labels are used to adjust the model's weights.\",\"dateModified\":\"2026-01-06T23:45:37.568Z\",\"isPartOf\":{\"@id\":\"https://docs.featureform.com#website\"},\"breadcrumb\":{\"@id\":\"https://docs.featureform.com/abstractions/training-set#breadcrumb\"}},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://docs.featureform.com/abstractions/training-set#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Featureform Resource Types\",\"item\":\"https://docs.featureform.com/abstractions/abstractions\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Training Sets\",\"item\":\"https://docs.featureform.com/abstractions/training-set\"}]},{\"@type\":[\"Article\",\"TechArticle\"],\"@id\":\"https://docs.featureform.com/abstractions/training-set#article\",\"headline\":\"Training Sets\",\"name\":\"Training Sets\",\"description\":\"Models require training, a process that typically involves feeding in a set of features with known labels. During training, the model makes inferences based on these features, and the labels are used to adjust the model's weights.\",\"url\":\"https://docs.featureform.com/abstractions/training-set\",\"mainEntityOfPage\":{\"@id\":\"https://docs.featureform.com/abstractions/training-set#webpage\"},\"dateModified\":\"2026-01-06T23:45:37.568Z\",\"publisher\":{\"@id\":\"https://docs.featureform.com/#organization\"},\"isPartOf\":{\"@id\":\"https://docs.featureform.com#website\"}}]}\u003c/script>\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@type\":\"WebSite\",\"name\":\"Featureform\",\"creator\":{\"@type\":\"Organization\",\"name\":\"Mintlify\",\"url\":\"https://mintlify.com\"}}\u003c/script>","siteName":"Featureform","nav":{"global":{"tabs":[{"tab":"Python SDK","href":"https://sdk.featureform.com/"}],"anchors":[{"anchor":"Community","href":"https://join.slack.com/t/featureform-community/shared_invite/zt-xhqp2m4i-JOCaN1vRN2NDXSVif10aQg","icon":"slack"},{"anchor":"Github","href":"https://github.com/featureform","icon":"github"}]},"anchors":[{"anchor":"Documentation","icon":"book-open","groups":[{"group":"Overview","pages":[{"title":"What is Featureform?","href":"/introduction"},{"title":"Quickstart","href":"/deployment/quickstart-docker"},{"group":"Concepts","pages":[{"title":"Immutability, Lineage, and Directed Acyclic Graphs (DAGs)","href":"/concepts/immutability-lineage-and-dags"},{"title":"Versioning and Variants","href":"/concepts/versioning-and-variants"},{"title":"Setting Custom Tags and Properties","href":"/concepts/tags-and-properties"},{"title":"Streaming Data: Real-time Updates","href":"/concepts/streaming"},{"title":"Exploring Resources with Dataframes","href":"/concepts/dataframes"},{"title":"Dataframe and SQL Transformation Support","href":"/concepts/dataframe-sql-transformation"},{"title":"The LLM Workflow with Featureform","href":"/concepts/rag-vector-db-llms"},{"title":"Calculating On-Demand Features at Request Time","href":"/concepts/on-demand-features-request-time"},{"title":"Search and Discover Features and Transformations","href":"/concepts/search-and-discovery-features"},{"title":"Achieving Point-in-Time Correctness and Handling Historical Features with Time Series Data","href":"/concepts/point-in-time-correctness-historical-features-timeseries-data"},{"title":"Governance and Access Control: Ensuring Compliance","href":"/concepts/governance-and-access-control"},{"title":"Open-Source vs. Enterprise Featureform: What Sets Them Apart","href":"/concepts/enterprise-vs-open-source-feature-store"}]}]},{"group":"Using Featureform","pages":[{"title":"Featureform Workflow","href":"/getting-started/featureform-workflow"},{"title":"Architecture and Components","href":"/getting-started/architecture-and-components"},{"title":"Registering Infrastructure Providers","href":"/getting-started/connecting-your-data-infrastructure"},{"group":"Register, Transform, and Interact with Data Sets","pages":[{"title":"Transforming Data Sets","sidebarTitle":"Overview","href":"/getting-started/registering-transforming-and-interacting-with-data-sets"},{"title":"Scheduling Resources","href":"/getting-started/scheduling-resources"},{"title":"Streaming Data: Real-time Updates","href":"/getting-started/streaming-features"},{"title":"Calculating On-Demand Features at Request Time","href":"/getting-started/on-demand-features-request-time"}]},{"group":"Register and Serve Features and Training Sets","pages":[{"title":"Register and Serve Features, Labels, and Training Sets","sidebarTitle":"Overview","href":"/getting-started/register-and-serve-features-training-sets"},{"title":"Model to Feature Lineage","href":"/getting-started/model-to-feature-lineage"},{"title":"Calculating On-Demand Features at Request Time","href":"/getting-started/on-demand-features-request-time"},{"title":"Streaming Data: Real-time Updates","href":"/getting-started/streaming-features"}]},{"title":"Exploring the Feature Registry","href":"/getting-started/search-monitor-discovery-feature-registry-ui-cli"}]},{"group":"Featureform Resource Types","pages":[{"title":"Abstractions","href":"/abstractions/abstractions"},{"title":"Data Infrastructure Provider","href":"/abstractions/data-infrastructure-providers"},{"title":"Primary Data Sets","href":"/abstractions/primary-data-sets"},{"title":"Transforming Data Sets","href":"/abstractions/transforming-data-sets"},{"title":"Entities","href":"/abstractions/entity"},{"title":"Features","href":"/abstractions/feature"},{"title":"Embeddings","href":"/abstractions/embedding"},{"title":"Labels","description":"**Labels** are a core component of a [training set](/abstractions/training-set). A model relies on a set of [features](/abstractions/feature) to make an inference. During the training process, this inference is compared to a label, and the model is adjusted incrementally.","href":"/abstractions/label"},{"title":"Training Sets","href":"/abstractions/training-set"}]},{"group":"LLMs, Embeddings, and Vector Databases","pages":[{"title":"LLM Workflow","description":null,"href":"/llms-embeddings-and-vector-databases/llm-workflow-with-featureform"},{"title":"Building a Chatbot with OpenAI and a Vector Database","href":"/llms-embeddings-and-vector-databases/building-a-chatbot-with-openai-and-a-vector-database"}]},{"group":"Common Use Cases and Examples","pages":[{"title":"Fraud Detection and Featureform","href":"/use-cases/fraud-detection"},{"title":"Retrieval Augmented Generation (RAG) Workflow for Chatbots with Featureform","href":"/use-cases/llm-chatbot-rag"}]},{"group":"Supported Infrastructure Providers","pages":[{"title":"Overview of Infrastructure Providers","href":"/providers/overview"},{"group":"Offline Stores","pages":[{"title":"Offline Store","sidebarTitle":"Overview","href":"/providers/offline-store"},{"title":"Snowflake","href":"/providers/snowflake"},{"title":"Spark","href":"/providers/spark"},{"title":"Spark with Databricks","href":"/providers/spark_databricks"},{"title":"Spark with EMR","href":"/providers/spark_emr"},{"title":"Kubernetes","href":"/providers/kubernetes"},{"title":"BigQuery","href":"/providers/bigquery"},{"title":"Postgres","href":"/providers/postgres"},{"title":"Redshift","href":"/providers/redshift"},{"title":"ClickHouse","href":"/providers/clickhouse"}]},{"group":"Object and File Stores","pages":[{"title":"Object and File Stores","sidebarTitle":"Overview","href":"/providers/object-and-file-stores"},{"title":"S3","href":"/providers/aws-s3"},{"title":"Azure Blobs","href":"/providers/azure-blob-store"},{"title":"Google Cloud (GCS)","href":"/providers/google-cloud-gcs"},{"title":"HDFS","href":"/providers/hdfs"}]},{"group":"Inference Stores","pages":[{"title":"Cassandra","href":"/inference-online-stores/cassandra"},{"title":"DynamoDB","href":"/inference-online-stores/dynamodb"},{"title":"Firestore","href":"/inference-online-stores/firestore"},{"title":"MongoDB","href":"/inference-online-stores/mongodb"},{"title":"Redis","href":"/inference-online-stores/redis"}]},{"group":"Vector Databases","pages":[{"title":"Vector Database","sidebarTitle":"Overview","href":"/providers/vector-db"},{"title":"Redis","href":"/providers/redis"},{"title":"Pinecone","href":"/providers/pinecone"},{"title":"Weaviate","href":"/providers/weaviate"}]},{"title":"Extending Featureform with Custom Providers and Requesting New Providers","href":"/providers/custom-providers"}]},{"group":"Deployment","pages":[{"title":"Local mode","href":"/deployment/local-mode"},{"title":"Quickstart","href":"/deployment/quickstart-docker"},{"title":"Kubernetes","href":"/deployment/kubernetes"},{"title":"AWS","href":"/deployment/quickstart-aws"},{"title":"Azure","href":"/deployment/quickstart-azure"},{"title":"Google Cloud","href":"/deployment/quickstart-gcp"},{"title":"System Architecture","href":"/system-architecture"},{"title":"Backup and Restore","href":"/deployment/backup-and-restore"}]}]}]},"basePath":"","title":"Training Sets - Featureform","buildId":"dpl_345ReqzYaAjzS9QpeJemsKdb7KDj","deploymentId":"dpl_345ReqzYaAjzS9QpeJemsKdb7KDj","dynamics":[],"chunks":[]}