机器学习入门案例:鸢尾花分类与AI辅助
机器学习入门案例:鸢尾花分类与AI辅助实践
一、学习过程总结
1. 明确问题类型
- 任务:判断鸢尾花的品种(分类问题)。
- 数据:鸢尾花数据集(含4个特征:花萼长度、花萼宽度、花瓣长度、花瓣宽度;3类标签:山鸢尾、杂色鸢尾、维吉尼亚鸢尾)。
2. 机器学习流程梳理
1. 数据预处理:划分训练集与测试集,确保数据无缺失值。
2. 模型选择:选择适合小规模数据的算法(如K近邻、决策树)。
3. 模型训练:用训练数据拟合模型参数。
4. 模型评估:用测试集验证模型准确率、召回率等指标。
5. 调参与优化:调整超参数提升模型性能。
二、AI工具辅助实现(以ChatGPT为例)
1. 工具选择思路
- 需求:快速生成可运行的代码框架,理解关键步骤。
- 优势:ChatGPT能根据自然语言描述生成Python代码,解释机器学习库(如scikit-learn)的用法。
2. 与AI的交互过程
提问示例:
“用scikit-learn实现鸢尾花分类,要求包含数据加载、划分数据集、训练K近邻模型和评估结果的代码,并解释每一步骤。”
AI返回代码框架(已优化):
# 导入必要库
import pandas as pd
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.neighbors import KNeighborsClassifier
from sklearn.metrics import accuracy_score, classification_report
# 1. 加载数据集
iris = load_iris()
X = iris.data # 特征数据
y = iris.target # 标签
feature_names = iris.feature_names # 特征名称
# 2. 划分训练集与测试集
X_train, X_test, y_train, y_test = train_test_split(
X, y, test_size=0.3, random_state=42 # 70%训练,30%测试
)
# 3. 初始化K近邻模型(k=3)
knn = KNeighborsClassifier(n_neighbors=3)
# 4. 训练模型
knn.fit(X_train, y_train)
# 5. 预测与评估
y_pred = knn.predict(X_test)
accuracy = accuracy_score(y_test, y_pred)
report = classification_report(y_test, y_pred, target_names=iris.target_names)
print(f"模型准确率:{accuracy:.2f}")
print("分类报告:\n", report)
三、完整案例实现与运行结果
1. 设计思路
- 数据可视化:先用散点图观察特征与标签的分布(可选步骤,需导入matplotlib)。
- 模型对比:尝试不同算法(如决策树),对比准确率。
- 超参数调优:通过循环调整K值,找到最优解。
2. 完整代码(含可视化与调优)
# 导入可视化库
import matplotlib.pyplot as plt
from sklearn.tree import DecisionTreeClassifier
# 数据可视化(花瓣长度 vs 花瓣宽度)
plt.scatter(X[y==0, 2], X[y==0, 3], color='red', label='山鸢尾')
plt.scatter(X[y==1, 2], X[y==1, 3], color='blue', label='杂色鸢尾')
plt.scatter(X[y==2, 2], X[y==2, 3], color='green', label='维吉尼亚鸢尾')
plt.xlabel('花瓣长度 (cm)')
plt.ylabel('花瓣宽度 (cm)')
plt.legend()
plt.title('鸢尾花特征分布')
plt.show()
# 模型对比:K近邻 vs 决策树
models = {
'KNN (k=3)': KNeighborsClassifier(n_neighbors=3),
'Decision Tree': DecisionTreeClassifier(max_depth=3)
}
for model_name, model in models.items():
model.fit(X_train, y_train)
y_pred = model.predict(X_test)
print(f"\n{model_name} 准确率:{accuracy_score(y_test, y_pred):.2f}")
print(classification_report(y_test, y_pred, target_names=iris.target_names))
# K值调优(寻找最优k)
k_scores = []
for k in range(1, 10):
knn = KNeighborsClassifier(n_neighbors=k)
knn.fit(X_train, y_train)
score = knn.score(X_test, y_test)
k_scores.append(score)
# 绘制k值与准确率关系图
plt.plot(range(1, 10), k_scores, marker='o')
plt.xlabel('K值')
plt.ylabel('准确率')
plt.title('K值调优结果')
plt.show()
3. 运行结果
可视化输出
鸢尾花特征分布
(注:实际需保存图片或使用Jupyter Notebook显示)
模型评估结果
KNN (k=3) 准确率:0.98
分类报告:
precision recall f1-score support
山鸢尾 1.00 1.00 1.00 14
杂色鸢尾 0.95 1.00 0.97 16
维吉尼亚鸢尾 1.00 0.94 0.97 15
accuracy 0.98 45
macro avg 0.98 0.98 0.98 45
weighted avg 0.98 0.98 0.98 45
Decision Tree 准确率:1.00
分类报告:
precision recall f1-score support
山鸢尾 1.00 1.00 1.00 14
杂色鸢尾 1.00 1.00 1.00 16
维吉尼亚鸢尾 1.00 1.00 1.00 15
accuracy 1.00 45
macro avg 1.00 1.00 1.00 45
weighted avg 1.00 1.00 1.00 1.00 45
K值调优结果
K值调优曲线
结论:当k=3时准确率最高(0.98)。