机器学习入门最经典的第一课,就是用 scikit-learn 训练一个分类模型。它把”加载数据、预处理、训练、评估”封装成统一的接口,几十行代码就能跑通完整流程。这篇教程以鸢尾花数据集为例,手把手带你走完每一步。

机器学习的标准流程

不管多复杂的模型,都遵循这条流水线:

前置准备

pip install scikit-learn pandas matplotlib

步骤一:加载数据集

sklearn 自带鸢尾花数据集,包含 150 条样本、4 个特征、3 个类别:

from sklearn.datasets import load_iris

data = load_iris()
X = data.data # 特征:花萼、花瓣的长宽
y = data.target # 标签:3 种鸢尾花
print(X.shape, y.shape) # (150, 4) (150,)

步骤二:划分训练集与测试集

用一部分数据训练、另一部分评估,避免模型”背答案”:

from sklearn.model_selection import train_test_split

X_train, X_test, y_train, y_test = train_test_split(
X, y, test_size=0.2, random_state=42, stratify=y)
  • test_size=0.2:20% 作测试集
  • stratify=y:保证训练/测试集里各类别比例一致
  • random_state:固定随机种子,结果可复现

步骤三:特征预处理

不同特征量纲不同,标准化能提升很多模型的效果:

from sklearn.preprocessing import StandardScaler

scaler = StandardScaler()
X_train = scaler.fit_transform(X_train) # 训练集 fit + transform
X_test = scaler.transform(X_test) # 测试集只 transform

注意:测试集只能用训练集学到的均值方差来 transform,不能重新 fit,否则会造成数据泄漏。

步骤四:选择并训练模型

以逻辑回归为例,fit 一行完成训练:

from sklearn.linear_model import LogisticRegression

model = LogisticRegression(max_iter=200)
model.fit(X_train, y_train)

换成决策树、SVM、随机森林,只需替换这一行,接口完全一致。

步骤五:评估效果

from sklearn.metrics import accuracy_score, classification_report

y_pred = model.predict(X_test)
print("准确率:", accuracy_score(y_test, y_pred))
print(classification_report(y_test, y_pred, target_names=data.target_names))

准确率之外,还要看精确率、召回率、F1,尤其在类别不平衡时。

步骤六:预测新数据

new_sample = [[5.1, 3.5, 1.4, 0.2]]
new_scaled = scaler.transform(new_sample)
pred = model.predict(new_scaled)
print("预测类别:", data.target_names[pred][0])

步骤七:用 Pipeline 一键串联

预处理和模型可以用 Pipeline 打包,避免手动管理 scaler:

from sklearn.pipeline import make_pipeline

pipe = make_pipeline(StandardScaler(), LogisticRegression(max_iter=200))
pipe.fit(X_train, y_train)
print(pipe.score(X_test, y_test)) # 直接输出准确率

Pipeline 把预处理和模型作为一个整体,杜绝数据泄漏,也方便后续调参。

常见问题

  • 准确率很低:先检查数据是否 shuffle、特征是否有意义
  • 训练好测试差:过拟合,减少模型复杂度或加正则
  • 报收敛警告:逻辑回归调大 max_iter
  • 类别不平衡:用 class_weight="balanced"

小结

scikit-learn 用统一的 fit / predict / score 接口,把机器学习流程标准化。记住这条主线——划分数据、预处理、训练、评估、预测,再用 Pipeline 串起来,你就能快速尝试各种模型。这套范式同样适用于回归、聚类等绝大多数传统机器学习任务。