🚀 ML.NET 实战:从数据到容器化部署的全流程二分类系统模板
本教程选用 UCI Adult 开源数据集,搭建一个具备完整预处理、模型训练、评估可视化、部署、CI/CD、监控与模型版本管理能力的 ML.NET 企业级分类系统。
🧭 为什么选择 UCI Adult?
UCI Adult 数据集(又称 Census Income)是机器学习分类任务中最广泛使用的基准数据集之一,具备以下特征:
- 📉 目标分布不均衡(>50K 占比约 24%)
- 🔀 含有数值与类别混合特征(年龄、学历、婚姻状态等)
- ❓ 含有缺失值(以
?表示) - 🧪 可广泛复用于二分类算法对比、特征工程实践
📊 1. 数据集介绍与清洗
UCI Adult 原始数据共 15 列,字段如下:
| 索引 | 字段名 | 类型 | 示例值 | 说明 |
|---|---|---|---|---|
| 0 | age | int | 39 | 年龄 |
| 1 | workclass | string | State-gov | 工作类型 |
| 2 | fnlwgt | int | 77516 | 人口统计权重 |
| 3 | education | string | Bachelors | 教育程度 |
| 4 | education-num | int | 13 | 教育等级(数值化) |
| 5 | marital-status | string | Never-married | 婚姻状态 |
| 6 | occupation | string | Adm-clerical | 职业 |
| 7 | relationship | string | Not-in-family | 家庭关系 |
| 8 | race | string | White | 种族 |
| 9 | sex | string | Male | 性别 |
| 10 | capital-gain | int | 2174 | 资本收益 |
| 11 | capital-loss | int | 0 | 资本损失 |
| 12 | hours-per-week | int | 40 | 每周工作时长 |
| 13 | native-country | string | United-States | 原籍国家 |
| 14 | income | string | <=50K / >50K | 年收入(二分类标签) |
这些字段中,workclass、occupation、native-country 含有 ? 表示缺失值。
Python 清洗代码
import pandas as pd
import numpy as np
# 完整列名(按顺序)
cols = [
"age", "workclass", "fnlwgt", "education", "education-num",
"marital-status", "occupation", "relationship", "race", "sex",
"capital-gain", "capital-loss", "hours-per-week", "native-country", "income"
]
# 读取数据(将 " ?" 视为缺失值)
df = pd.read_csv("adult.data", names=cols, na_values=" ?", sep=',', skipinitialspace=True)
# 删除缺失值样本
df.dropna(inplace=True)
# 显示前几行验证清洗结果
print(df.head())
安装依赖提示
pip install pandas matplotlib numpy seaborn
🧼 数据预处理流程图
📈 2. Python 可视化
import matplotlib.pyplot as plt
import seaborn as sns
# 标签分布饼图
plt.pie(df['income'].value_counts(), labels=df['income'].unique(), autopct='%1.1f%%')
plt.title("Income Distribution")
plt.show()
# 年龄分布直方图
sns.histplot(df['age'], bins=20)
plt.title("Age Histogram")
plt.show()
🧱 3. TextLoader 配置与映射(C#)
using Microsoft.ML;
using Microsoft.ML.Data;
var mlContext = new MLContext(seed: 123);
// 定义 TextLoader 加载列结构(不将 Income 直接转换为 bool)
var loader = mlContext.Data.CreateTextLoader(

最低0.47元/天 解锁文章
1478

被折叠的 条评论
为什么被折叠?



