鸢尾花分类任务
上一篇博客:1.人工智能核心概念
1. 鸢尾花分类步骤
1.1 分析问题,搞定输入和输出
- 输入:花;
- 输出:类别
- 如何数字化一个实体(entity)?
- 用这个实体的特征/属性来刻画这个实体!!!
- 四个属性:花瓣长,花瓣宽,花萼长,花萼宽
- 输出:从零开始编号:0, 1, 2 …(zero index),鸢尾花一共3类
- 一个样本:花瓣长,花瓣宽,花萼长,花萼宽,类别编号
1.2 每个类别各采集50朵花
- 花瓣长1,花瓣宽1,花萼长1,花萼宽1,类别编号1
- 花瓣长2,花瓣宽2,花萼长2,花萼宽2,类别编号2
- 花瓣长3,花瓣宽3,花萼长3,花萼宽3,类别编号3
… - 花瓣长150,花瓣宽150,花萼长150,花萼宽150,类别编号150
1.3 选择一种算法,完成输入到输出的映射
- 分类算法
- KNN:K紧邻算法
- GNB:高斯贝叶斯
- DT:决策树算法
- SVM:支持向量机
- RF:随机森林算法
- 集成学习算法
1.4 第四步:部署,集成
2. KNN算法原理
2.1 基本概念
- KNN: K-Nearest Neighbors K个最近的邻居,所以也叫 K-近邻 算法
2.2 核心理念
- 近朱者赤,近墨者黑
- 跟什么样的人在一起,你就会变成什么样的人!!!
2.3 训练
- 惰性计算算法
- 规则 + 数据,不是严格意义上的人工智能算法
2.4 推理流程
- 给定一朵花,如何判定它是第几类?
- 第一步:找出这朵花 K 个最近的邻居(最好的兄弟,闺蜜)
- 相似度的度量
几何视角: 1. 欧式空间,距离计算,2. 勾股定理- 向量视角:1. 余弦相似度
- 相似度的度量
- 第二步:K个邻居进行投票,选出类别出现次数最多的类
3. 使用 sklearn 完成分类任务
3.1 代码实现
- knn_demo
from sklearn.datasets import load_iris
# 加载数据
X,y = load_iris(return_X_y=True)
print(X.shape,y.shape)
# 数据集切分
from sklearn.model_selection import train_test_split
# 参数:shuffle=True:打乱数据集,random_state=0 指定随机种子,方便复现结果
X_train,X_test,y_train,y_test = train_test_split(X,y,test_size=0.2,shuffle=True,random_state=0)
# 引入一个模型
from sklearn.neighbors import KNeighborsClassifier
# 1.构建模型
knn=KNeighborsClassifier(n_neighbors=3)
# 2.训练模型
knn.fit(X_train,y_train)
# 3.预测
y_pred=knn.predict(X_test)
print(y_pred)
print(y_test)