
AI人工智能分类识别------机器如何学习
学习目标
- 机器学习过程
- KNN算法原理解析
- 鸢尾花分类算法实战
- 模型调参和预测
PART 01 机器学习过程
一(w_1、w_2...)机器学习概述
1. 两种解决思路对比


- 传统基于规则的方法
- 依靠显性人工编程,规则由人手动明确编写
- 逻辑:条件判断分支,固定Code执行路径
- 机器学习方法
- 机器自动从数据中学习隐藏规律,无需人工写死全部规则
- 完整流程:训练数据输入 → 训练生成模型 → 新数据输入模型 → 输出预测
2. 核心公式
经验(数据) + 思考(算法) = 结果(预测)
- 特征:样本外在/内在条件(年龄(w_1、w_2...)收入(w_1、w_2...)天气(w_1、w_2...)花瓣长宽等)
- 标签:对应特征的最终结果(去旅游=1(w_1、w_2...)不去=0;鸢尾花品种)
3. 数据集划分
- 训练集:用于训练模型,让算法学习数据规律
- 测试集:模型训练完成后,用来验证模型效果
- 完整公式:
机器学习模型 = 数据 + 算法
核心结论:数据特征决定模型性能上限,算法仅无限逼近该上限
4. 模型训练逻辑

多特征加权求和计算:
Y=x1∗w1+x2∗w2+x3∗w3+x4∗w4Y=x_1*w_1+x_2*w_2+x_3*w_3+x_4*w_4Y=x1∗w1+x2∗w2+x3∗w3+x4∗w4
- 判定规则:KaTeX parse error: Can't use function '\(' in math mode at position 1: \̲(̲Y>0.5\) → 类别1(去);KaTeX parse error: Can't use function '\(' in math mode at position 1: \̲(̲Y<0.5\) → 类别0(不去)
- KaTeX parse error: Can't use function '\(' in math mode at position 4: w_1\̲(̲w_1、w_2...\)w_2... 为算法自动学习的权重
5. 模型拟合三种状态
分类(w_1、w_2...)回归任务均存在3种拟合效果:
- 欠拟合:模型过于简单,无法学习数据规律,训练/测试效果都差
- 最优拟合:完美学习通用规律,训练(w_1、w_2...)测试集准确率均高
- 过拟合:过度学习训练集噪声,测试新数据效果极差
6. 机器学习整体分类

(1)有监督学习(带标签数据)
- 分类(离散结果):逻辑回归(w_1、w_2...)SVM(w_1、w_2...)神经网络(w_1、w_2...)决策树(w_1、w_2...)随机森林(w_1、w_2...)GBDT(w_1、w_2...)KNN(w_1、w_2...)朴素贝叶斯
- 回归(连续数值):线性回归(w_1、w_2...)SVM(w_1、w_2...)神经网络(w_1、w_2...)决策树(w_1、w_2...)随机森林(w_1、w_2...)GBDT(w_1、w_2...)KNN
(2)无监督学习(无标签数据)
- 聚类:K-means(w_1、w_2...)层次聚类(w_1、w_2...)密度聚类
- 其他:关联规则(w_1、w_2...)PCA降维(w_1、w_2...)GMM高斯混合模型
PART 02 KNN算法原理解析
1. KNN基础概念
KNN全称K-Nearest Neighbor(K最邻近法),1968年由Cover和Hart提出,最简单的分类机器学习算法。
核心分类逻辑
若一个未知样本,在特征空间中距离最近的K个样本 里,大多数属于某一类别,则该未知样本判定为此类别。

例:KaTeX parse error: Can't use function '\(' in math mode at position 1: \̲(̲K=3\),最近3个样本中2个蓝三角 → 新样本判定为蓝三角
2. 距离计算公式
(1)欧式距离(二维,(p=2)(p=2)(p=2))
ρ=(x2−x1)2+(y2−y1)2\rho=\sqrt{\left(x_{2}-x_{1}\right)^{2}+\left(y_{2}-y_{1}\right)^{2}}ρ=(x2−x1)2+(y2−y1)2
(2)明可夫斯基通用距离
(∑i=1n∣Xi(a)−Xi(b)∣p)1p\left(\sum_{i=1}^{n}\left|X_{i}^{(a)}-X_{i}^{(b)}\right|^{p}\right)^{\frac{1}{p}}(i=1∑n Xi(a)−Xi(b) p)p1
- KaTeX parse error: Can't use function '\(' in math mode at position 1: \̲(̲p=1\):曼哈顿距离
- KaTeX parse error: Can't use function '\(' in math mode at position 1: \̲(̲p=2\):欧式距离(sklearn默认)
3. KNN核心超参数
(1)n_neighbors(K值)

- K过小:易受噪声(w_1、w_2...)异常点干扰,造成过拟合
- K过大:远距离样本干扰分类,造成欠拟合
- 工程习惯:K取奇数,避免投票平局
(2)weights权重
uniform(默认):所有近邻样本权重相等,簇状分布数据适用distance:权重与距离成反比,杂乱离散样本效果更好
(3)p:明可夫斯基距离阶数,控制距离度量方式
4. KNN优缺点
优点
- 对数据分布无前置假设,准确度高,轻微异常点不敏感
- 理论简单(w_1、w_2...)易理解(w_1、w_2...)易实现
缺点
- 数据分布偏移时容易分类失败
- 预测计算量大:每个新样本都要计算与全部训练样本的距离
PART 03 鸢尾花分类算法实战(sklearn)
1. sklearn工具介绍
Scikit-learn(sklearn):Python主流机器学习封装库,内置标准测试数据集
安装命令(中科大镜像)
bash
pip install scikit-learn -i https://pypi.mirrors.ustc.edu.cn/simple/
内置常用数据集
load_iris():鸢尾花数据集(本次案例)load_digits():手写数字数据集load_boston():波士顿房价数据集
2. 鸢尾花数据集介绍
4个特征
萼片长度(w_1、w_2...)萼片宽度(w_1、w_2...)花瓣长度(w_1、w_2...)花瓣宽度
3个分类标签(品种)
山鸢尾(w_1、w_2...)变色鸢尾(w_1、w_2...)维吉尼亚鸢尾
3. 完整代码分步解析
步骤1:导入工具 & 加载数据
python
from sklearn.datasets import load_iris
# 加载鸢尾花数据集
iris_data = load_iris()
# 拆分特征\(w_1、w_2...\)标签
data = iris_data.data # X特征
target = iris_data.target # y标签
步骤2:划分训练集(w_1、w_2...)测试集
python
from sklearn.model_selection import train_test_split
# test_size=0.3:30%数据作为测试集,shuffle打乱数据
x_train, x_test, y_train, y_test = train_test_split(
data, target, test_size=0.3, shuffle=True
)
步骤3:创建KNN模型并训练
python
from sklearn.neighbors import KNeighborsClassifier
# K=7,奇数
knn = KNeighborsClassifier(n_neighbors=7)
# 训练模型:特征+标签
knn.fit(x_train, y_train)
步骤4:模型评估 & 保存模型
python
# 输出测试集准确率
print(knn.score(x_test, y_test))
# 模型持久化保存
import joblib
joblib.dump(value=knn, filename='knniris.model')
4. 模型评估指标
- 准确率 accuracy_score:整体预测正确样本占比
python
from sklearn.metrics import accuracy_score
y_predict = knn.predict(x_test)
accuracy_score(y_test, y_predict)
- 召回率 recall_score:衡量模型识别正样本的能力
PART 04 模型调参和预测
1. 网格搜索GridSearchCV(自动超参调优)
批量遍历所有参数组合,自动选出最优参数
python
from sklearn.model_selection import GridSearchCV
# 1. 创建基础KNN模型
knn_clf = KNeighborsClassifier()
# 2. 定义待遍历的参数范围
param_grid = [{
'weights': ['distance','uniform'],
'n_neighbors': [i for i in range(1, 11)],
'p': [i for i in range(1, 6)]
}]
# 3. 网格搜索对象
knncv = GridSearchCV(knn_clf, param_grid=param_grid)
# 4. 训练搜索最优参数
knncv.fit(x_train, y_train)
调参结果查询API
knncv.best_params_:最优超参组合knncv.best_estimator_:使用最优参数的完整模型knncv.best_score_:最优参数对应的训练准确率
2. 模型预测
python
# 对测试集批量预测
y_predict = estimator.predict(x_test)
3. 模型保存与加载(joblib)
保存模型
python
import joblib
joblib.dump(value=estimator, filename="knniris.model")
加载模型
python
model = joblib.load(filename="knniris.model")