美文网首页
KNN最邻近分类运用

KNN最邻近分类运用

作者: 一天天111 | 来源:发表于2019-10-21 09:37 被阅读0次
    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)
    
    

    相关文章

      网友评论

          本文标题:KNN最邻近分类运用

          本文链接:https://www.haomeiwen.com/subject/vwbzmctx.html