KNN算法 - python实现

K近邻算法
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
%matplotlib inline

#案例一:电影数据分类

from sklearn import neighbors  #导入KNN分类模块
import warnings
warnings.filterwarnings('ignore') #不发出警告

data=pd.DataFrame({'name':['北京遇上西雅图','喜欢你','疯狂动物城','战狼2','力王','敢死队'],
                                    'fight':[3,2,1,101,99,98],
                                    'kiss':[104,100,81,10,5,2],
                                    'type':['Romance','Romance','Romance','Action','Action','Action']})

print(data)
print('----------------------------------')

plt.scatter(data[data['type']=='Romance']['fight'],data[data['type']=='Romance']['kiss'],color='r',marker='o',label='Romance')
plt.scatter(data[data['type']=='Action']['fight'],data[data['type']=='Action']['kiss'],color='b',marker='o',label='Action')
plt.grid()
plt.legend()

#建立模型
knn=neighbors.KNeighborsClassifier()
knn.fit(data[['fight','kiss']], data['type'])

#预测“你的名字”[18,90]
knn.predict([[18, 90]])

plt.scatter(18,90,color='r',marker='x',label='Romance')
plt.ylabel('kiss')
plt.xlabel('fight')
plt.text(18,90,'《你的名字》',color='r')

在这里插入图片描述

#测试集
data2=pd.DataFrame(np.random.rand(100,2)*50,columns=['fight','kiss'])
data2['typetest']=knn.predict(data2)
data2.head()

plt.scatter(data[data['type']=='Romance']['fight'],data[data['type']=='Romance']['kiss'],color='r',marker='o',label='Romance')
plt.scatter(data[data['type']=='Action']['fight'],data[data['type']=='Action']['kiss'],color='b',marker='o',label='Action')
plt.grid()
plt.legend()

plt.scatter(data2[data2['typetest']=='Romance']['fight'],data2[data2['typetest']=='Romance']['kiss'],color='r',marker='x',label='Romance')
plt.scatter(data2[data2['typetest']=='Action']['fight'],data2[data2['typetest']=='Action']['kiss'],color='b',marker='x',label='Action')

在这里插入图片描述

#案例二:植物分类

from sklearn import datasets
#导入数据集
iris=datasets.load_iris()
print(iris.keys())
print('数据长度为:%i条' % len(iris['data']))
print(iris.feature_names)
print(iris.target_names)
print(iris.data[:5])
data=pd.DataFrame(iris.data,columns=iris.feature_names)
data['target']=iris.target
ty=pd.DataFrame({'target':[0,1,2],
                                'target_names':iris.target_names})
df=pd.merge(data,ty,on='target')
df.head()

#模型
knn=neighbors.KNeighborsClassifier()
knn.fit(iris.data,df['target_names'])

#预测
pre_data=knn.predict([[0.2,0.1,0.3,0.4]])
print(pre_data)

在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Jepson2017

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值