机器学习基础||knn算法对鸢尾花数据集分析

1.数据集下载和数据集划分

2.可视化分析

绘制箱型图

#绘制箱形图
print(iris_data.plot(kind='box'))
plt.tight_layout()

在这里插入图片描述
绘制小提琴图

#绘制小提琴图
import seaborn as sb
for column_index, column in enumerate(iris_data.columns):
    if column == 'class':
        continue
    plt.subplot(2, 2, column_index + 1)
    sb.violinplot(x='class', y=column, data=iris_data)
plt.show()

在这里插入图片描述

绘制两两特征的散点图

//两两特征之间得散点图
print(sns.pairplot(iris_data,hue='class',height=1.5))

在这里插入图片描述
可以看到右下角各类的数据点聚集性比较好,从而选出最优特征。
绘制区域图

//绘制区域图
print(iris_data.plot.area(stacked=False))

在这里插入图片描述
这相当于一个鸢尾花数据集的频率尺度折线图,横坐标的三段分别代表三个不同的种类,可以看到花瓣的宽度和花瓣的长度随着种类的变化有一个很明显的阶梯状分布

3.KNN算法原理

KNN算法又叫k临近算法,可以用于分类和回归。做分类时,基本思想就是如果要判定Alice是男生还是女生,就在训练集中找到与Alice最近的k个人,看这k个多数是男生还是女生,如果男生多,则Alice归为男生,如果女生多,则Alice归为女生,下面来个图展示一下:
在这里插入图片描述
绿色表示Alice,如果k取3的话,周围有两个红三角(女生),一个蓝方块(男生),2>1则Alice属于女生。
KNN算法的主要工作:
1.计算每个实例到k个实例之间的距离(一般采用欧式距离)
2.寻找k值
寻找k值尤为重要,因为:
K值过大:样本不均匀,分类模糊
K值过小:受异常值影响,波动较大
可以 采用交叉验证法去寻找K值,下面代码用knn算法对鸢尾花进行分类,并对交叉验证过程进行可视化分析:

from sklearn.datasets import load_iris
from sklearn.model_selection  import cross_val_score
import matplotlib.pyplot as plt
from sklearn.neighbors import KNeighborsClassifier
#用交叉验证
#读取鸢尾花数据集
iris = load_iris()
x = iris.data
y = iris.target
k_range = range(1, 31)
k_error = []
#循环,取k=1到k=31,查看误差效果
for k in k_range:
    knn = KNeighborsClassifier(n_neighbors=k)
    #cv参数决定数据集划分比例,这里是按照5:1划分训练集和测试集
    scores = cross_val_score(knn, x, y, cv=6, scoring='accuracy')
    k_error.append(1 - scores.mean())

#画图,x轴为k值,y值为误差值
plt.plot(k_range, k_error)
plt.xlabel('Value of K for KNN')
plt.ylabel('Error')
plt.show()

运行结果:
在这里插入图片描述

  • 2
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值