scikit-learn

像一位教练:按统一流程训练模型。

常写作 sklearn,里面装着许多常用算法和工具。

🌸 花朵🏠 房价📧 邮件
切分数据训练模型考试评分
92

只需记住 3 步

1选工具分类、回归、聚类,各有合适的算法。
2统一训练都用 fit() 学习,用 predict() 作答。
3公平考试留一部分数据,检查它是否真的学会。

体验 fit → predict

🤖
还没学习

机器学习到底在学什么?

给模型很多“题目和答案”,让它自己找到输入与答案之间的规律。

面积 X₁房龄 X₂价格 y
80㎡5年320万
120㎡2年520万
60㎡20年180万
X → y特征与目标

X 是模型能看到的线索,例如面积和房龄;y 是希望预测的答案,例如房价。

训练:给 X 和 y。预测:只给新 X,让模型猜 y。

先判断是哪类问题

🐱 / 🐶分类 Classification

答案是类别:垃圾邮件还是正常邮件?

¥ 328回归 Regression

答案是连续数字:房价、销量、温度。

● ● ▲ ▲聚类 Clustering

没有标准答案,让模型自己寻找相似群体。

为什么要分训练集和测试集?

考试题提前泄露,分数就失去意义。机器学习也一样。

全部数据 100%训练集 80%:用来学习测试集 20%:最后考试
学会规律

训练分数和测试分数都不错,面对新数据仍能工作。

过拟合

训练几乎满分,测试很差。模型把练习题背下来了。

一条完整的 sklearn 流水线

原始数据缺失值标准化模型预测
from sklearn.model_selection import train_test_split
from sklearn.pipeline import make_pipeline
from sklearn.impute import SimpleImputer
from sklearn.preprocessing import StandardScaler
from sklearn.linear_model import LogisticRegression

X_train, X_test, y_train, y_test = train_test_split(
    X, y, test_size=0.2, random_state=42)

model = make_pipeline(
    SimpleImputer(), StandardScaler(), LogisticRegression())
model.fit(X_train, y_train)
prediction = model.predict(X_test)
score = model.score(X_test, y_test)
train_test_split:先把练习题与考试题分开make_pipeline:把清洗、加工和模型锁成固定顺序fit:从训练集寻找规律predict:给测试题作答score:计算答对得怎样

“92分”到底代表什么?

指标适合回答需要注意
Accuracy 准确率总共猜对多少比例?类别极不平衡时容易骗人
Precision 精确率判为“是”的里面有多少真是?误报代价高时重要
Recall 召回率真正的“是”找回了多少?漏掉代价高时重要
F1精确率和召回率的折中怎样?仍要结合业务看
MAE数字预测平均差多少?单位与目标相同,直观

如何选第一个模型?

分类:先试 LogisticRegression;需要非线性时试 RandomForest。
回归:先试 LinearRegression;关系复杂时试 RandomForestRegressor。
聚类:知道大约分几群,可以先试 KMeans。
原则:先做简单基线,再增加复杂度。复杂模型也要通过测试集。

三个新手常踩的坑

先用全数据做标准化测试集信息泄露给训练过程,分数会虚高。预处理放进 Pipeline。
只看一个分数准确率高不等于业务可用。检查混淆矩阵、误报和漏报。
随机结果无法复现设置 random_state,让下次切分与训练结果可以重现。