共计 2055 个字符,预计需要花费 6 分钟才能阅读完成。
机器学习基本概念
机器学习是人工智能的一个分支,它让计算机通过数据学习规律,而不是直接编程。打个比方,就像教小孩认动物:通过反复看猫狗图片(数据),他们自己总结出猫狗特征(模型),见到新动物时能判断种类(预测)。

机器学习主要分两类:
-
监督学习:就像有答案的练习题。数据包含特征(如花朵尺寸)和标签(如品种),目标是建立特征到标签的映射关系。典型应用:房价预测、垃圾邮件分类。
-
无监督学习:像整理杂乱的文件柜。数据只有特征没有标签,系统自动发现结构。典型应用:客户分群、异常检测。
我们今天要做的鸢尾花分类属于监督学习。
开发环境搭建
推荐使用 Python+Jupyter 组合,就像厨师的刀和砧板:
- 安装 Python 3.8+(官网下载勾选 ”Add to PATH”)
- 命令行执行
pip install jupyter scikit-learn pandas matplotlib - 启动 Jupyter:
jupyter notebook,浏览器会自动打开
小技巧:在 Jupyter 单元格按 Shift+Enter 可以立即执行代码,非常适合分步调试。
实战:鸢尾花分类
数据加载与观察
Scikit-learn 自带了经典数据集,省去找数据的麻烦:
from sklearn.datasets import load_iris
import pandas as pd
# 加载数据
iris = load_iris()
# 转换为 DataFrame 更直观
df = pd.DataFrame(iris.data, columns=iris.feature_names)
df['target'] = iris.target # 添加目标列
# 查看前 5 行
print(df.head())
输出示例:
sepal length (cm) sepal width (cm) ... petal width (cm) target
0 5.1 3.5 ... 0.2 0
1 4.9 3.0 ... 0.2 0
数据预处理
虽然这个数据集已经很干净,但实际项目中常需要:
- 处理缺失值:
df.fillna()或删除 - 特征缩放:
from sklearn.preprocessing import StandardScaler - 训练集 / 测试集拆分(关键步骤!):
from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(
iris.data,
iris.target,
test_size=0.2, # 20% 作测试
random_state=42 # 随机种子保证结果可复现
)
模型训练
选择最易理解的 K 近邻算法(KNN):
from sklearn.neighbors import KNeighborsClassifier
# 创建模型(选择 3 个邻居投票)knn = KNeighborsClassifier(n_neighbors=3)
# 训练模型(就像记笔记)knn.fit(X_train, y_train)
模型评估
测试模型是否真正学会了:
# 在测试集上预测
y_pred = knn.predict(X_test)
# 计算准确率
from sklearn.metrics import accuracy_score
print(f"准确率: {accuracy_score(y_test, y_pred):.2f}")
典型输出:准确率: 0.97 表示 97% 的预测正确。
常见问题解决
错误 1:维度不匹配
报错:ValueError: shapes (a,b) and (c,d) not aligned
解决方法:
– 检查 X_train 和X_test的特征数量是否一致
– 使用 X.shape 查看维度
错误 2:过拟合
现象:训练集准确率 99%,测试集只有 60%
对策:
– 增加训练数据
– 减小模型复杂度(如降低 KNN 的 n_neighbors)
– 尝试正则化方法
进阶评估指标
除了准确率,还有更细致的评估方式:
from sklearn.metrics import classification_report
print(classification_report(y_test, y_pred))
输出示例:
precision recall f1-score support
0 1.00 1.00 1.00 10
1 1.00 0.90 0.95 10
2 0.90 1.00 0.95 9
- 精确率(precision):预测为正的样本中实际为正的比例
- 召回率(recall):实际为正的样本中被正确预测的比例
- F1-score:两者的调和平均数
下一步学习建议
- 尝试其他算法:决策树(
DecisionTreeClassifier)、SVM 等 - 特征工程:尝试组合或创建新特征(如花瓣长宽比)
- 部署应用:用 Flask 将模型做成 API
- 学习资源:
- 《Python 机器学习手册》
- Kaggle 入门竞赛(如 Titanic)
思考题
如何将这个模型应用到其他分类问题?关键在于:
– 确保新数据有相似的特征结构
– 重新收集和标注目标数据
– 可能需要调整特征预处理方式
举个例子:如果想区分苹果和橙子,可以测量颜色值、重量、直径等作为新特征。
