import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from sklearn import neighbors#导入KNN模块
plt.rcParams['font.sans-serif'] = ['Arial Unicode MS']#解决绘图中文乱码问题
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)
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='g',marker='o',label='Action')
# =============================================================================
#
# # plt.legend()
#
#
# #knn.fit(X,y)
# # 其中X是数组形式(下面的例子中会有注释讲解),在X中的每一组数据可以是 tuple 也可以是 list 或者一维 array,但要注意所有数据的长度必须一样(等同于特征的数量)。这一点非常的重要。我们可以把X看成是一个矩阵形式,每一行代表的是一个输入实例的特征数据。
# # y 是一个和 X 长度相同的 list 或一个一维 array,其中每个元素是 X 中相对应的数据的分类标签。
#
# #用已知的分类数据,建立分类模型
# knn=neighbors.KNeighborsClassifier()
# knn.fit(data[['fight','kiss']],data['type'])
#
# #进行分类预测
# example=np.array([18,90])
# #knn.predict([18,90])#这样会报错,需要进行reshape(1,-1),因为我们只有一个数据
# example=example.reshape(1,-1)
# pre_res=knn.predict(example)
# print("预测的类型是:",pre_res)
# print("过")
#
# #用图表的形式表示出来
# 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.randn(100,2)*50,columns=['fight','kiss'])
# data2['typetest']=knn.predict(data2)
# #print(data2)
#
# #图形化表示
# 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='g',marker='o',label='Action')
# 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='g',marker='x',label='Action')
#
#
# data2.head()
#
# =============================================================================
#案例二:植物分类
#导入数据
from sklearn import datasets
iris=datasets.load_iris()
#print(iris)
print(iris.keys())
print('数据长度为:%i条'%len(iris['data']))
print(iris.feature_names)
print(iris.target_names)
print(iris.data[:5])
#feature_name--特征分类:萼片长度、萼片宽度、花瓣长度、花瓣宽度
#目标类别:setosa、versicolor、virginica
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})
iris.target
df=pd.merge(data,ty,on='target')
data.head()
knn=neighbors.KNeighborsClassifier()
knn.fit(iris.data,df['target_names'])
ex=np.array([0.2,0.1,0.3,0.4])
ex=ex.reshape(1,-1)
pre_data=knn.predict(ex)#p: 在机器学习系列中,我们知道p=1时,距离方法定义为曼哈顿距离,在p=2的时候我们定为欧几里得距离。默认值为2。
#每一组数据可以是 tuple 也可以是 list 或者一维 array
pre_data# 结果--array(['setosa'], dtype=object)
网友评论