机器学习入门
机器学习入门
1 . 机器学习是什么?
机器学习(Machine Learning, ML)是一种用数据经验替代显式规则编程来完成任务的方法──模型从样本 (X, y) 中学习 映射函数 f: X → Y,并在新样本上做出预测。和传统“if … else
”程序相比,它更像“用历史统计经验来推断未来” 。
关键词 | 通俗解释 |
---|---|
特征 (feature) | 可观察条件,如天气、价格 |
标签 (label) | 结果/决策,如“去不去看球赛” |
训练集 / 测试集 | 用来“学” / 用来“考” |
欠拟合 / 过拟合 | 模型太简单学不全 / 太复杂只记死记忆,泛化差 |
数据决定上限,算法只负责无限逼近这个上限。
2 . 从“看球赛”小故事理解模型训练流程
- 收集数据:
天气、票价、是否有朋友等 → 决策结果(去/不去)。 - 拆分数据:80 % 训练,20 % 测试。
- 选算法:例如 KNN、线性回归等。
- 训练 (fit):让算法寻找最好拟合训练集的参数。
- 评估 (score):在测试集上打分,检查是否过/欠拟合。
- 部署 (predict):对未来比赛日输入特征,输出决策。
小结:机器学习就是把“人类经验”转换成“可计算模型”,然后复制这种决策能力。
3 . KNN:最容易上手的分类算法
3.1 直观概念
- 把每个样本想成坐标系里的一个点。
- 给新点找最近的 K 个邻居;如果多数邻居属于类别 A,就把新点也归为 A。
- 零训练成本:模型只是存储全部数据,预测时再计算距离。
3.2 距离怎么量?
在 p 维空间常用 欧式距离
d ( x , x ′ ) = ∑ i = 1 p ( x i − x i ′ ) 2 d(\mathbf{x},\mathbf{x}')=\sqrt{\sum_{i=1}^{p}(x_i-x'_i)^2} d(x,x′)=i=1∑p(xi−xi′)2
也可选 曼哈顿距离(当 p=1
时更像“横竖走格子”)。距离指标由 p
参数控制。
3.3 超参数
参数 | 作用 | 经验选取 |
---|---|---|
K (n_neighbors) | 看几个邻居 | 奇数,√N 左右,再用网格搜索调优 |
weights | 邻居是否按距离加权 | uniform / distance |
p | 距离度量 | 1 → 曼哈顿;2 → 欧式 |
思路:K 小易过拟合,K 大易欠拟合;用交叉验证找到平衡点。
4 . 用 sklearn 动手:Iris 鸢尾花分类
from sklearn.datasets import load_iris
from sklearn.neighbors import KNeighborsClassifier
from sklearn.model_selection import train_test_split, GridSearchCVX, y = load_iris(return_X_y=True)
X_tr, X_te, y_tr, y_te = train_test_split(X, y, test_size=0.3, shuffle=True)# 网格搜索自动调 K / weights / p
param = {'n_neighbors': range(1, 11, 2),'weights': ['uniform', 'distance'],'p': [1, 2]}
clf = GridSearchCV(KNeighborsClassifier(), param, cv=5)
clf.fit(X_tr, y_tr)print("最佳参数:", clf.best_params_)
print("测试集准确率:", clf.score(X_te, y_te))
- 训练:
fit
- 预测:
predict
- 保存模型:
joblib.dump(clf, 'knn.model')
- 加载模型:
clf = joblib.load('knn.model')
即使数学基础薄弱,只要记住“把数据当坐标、看最近邻就是同类”,就能理解 KNN。
5 . KNN 优缺点 & 何时该用
优点 | 缺点 |
---|---|
简单直觉,无参数化假设 | 预测耗时:每次都要计算全部样本距离 |
对异常点不敏感 | 对高维数据“维度灾难”严重 |
可处理多分类 | 数据偏移或类别分布不均时效果差 |
适用场景:样本量中等、特征维度低、实时性要求不高的分类任务,例如推荐系统中的“找相似用户/物品”。
6 . 从 KNN 再到更强的模型
当 KNN 出现 计算慢 或 维度灾难 时,可尝试:
- 决策树 / 随机森林:通过一系列“是/否”问题快速分类。
- SVM、Logistic 回归:对高维稀疏数据更友好。
- 梯度提升、神经网络:在大数据量与复杂关系下效果更强。
但无论选择哪种算法,核心流程——拆分数据 → 训练 → 评估 → 调参 → 部署——始终不变。
机器学习让计算机“通过例子学经验”;KNN是最易理解的入门算法: “投票给最近的 K 个邻居”。掌握它的思想和 scikit-learn 用法,你就跨进了 ML 的大门。