knn的调用库和knn手写

from sklearn import datasets
from sklearn.model_selection import train_test_split
from sklearn.neighbors import KNeighborsClassifier
import numpy as  np
from sklearn.metrics import accuracy_score


iris=datasets.load_iris()

x=iris.data
y=iris.target
#print(iris)
#print(x[1],y)
x_train,x_test,y_train,y_test=train_test_split(x,y,random_state=2003)

clf=KNeighborsClassifier(n_neighbors=3)
clf.fit(x_train,y_train)

#print(clf.predict(np.array([5.1, 3.5, 1.4, 0.2]).reshape(1,-1)))  预测值

'''
直接引用库进行 准确率的计算
y_pred=clf.predict(x_test)
acc=accuracy_score(y_test,y_pred)
print('准确率:',acc)
'''

current =np.count_nonzero((clf.predict(x_test)==y_test)==True) # 准确的个数
print('准确率=%.3f'%(current/len(x_test)))


#----------------------------上面是引用的库  这里直接进行实现-----------
#----------------------------上面是引用的库  这里直接进行实现-----------
#----------------------------上面是引用的库  这里直接进行实现-----------
#----------------------------上面是引用的库  这里直接进行实现-----------
#----------------------------上面是引用的库  这里直接进行实现-----------

from sklearn import datasets
from collections import Counter  # 为了做投票
from sklearn.model_selection import train_test_split
import numpy as np

#c = Counter('abracadabra')   # 测试Counter
#print(c.most_common())  #[('a', 5), ('b', 2), ('r', 2), ('c', 1), ('d', 1)]



iris=datasets.load_iris()
x=iris.data
y=iris.target
x_train,x_test,y_train,y_test=train_test_split(x,y,random_state=2003)


def ecu_dis(ins_1,ins_2):
    '''
    计算欧氏距离
    :param ins_1:  array 
    :param ins_2:  array
    :return: 
    '''
    return np.sqrt(sum((ins_1-ins_2)**2))    # sum()  用于array 类型

def knn_cay(x,y,test,k):
    '''
    给定一个测试数据test 通过knn算法来预测他的计算值
    
    :param x:   训练数据的特征
    :param y:   训练数据的标签
    :param tstInstance:  测试数据 假定 array类型
    :param k:     n_neighbors的数量
    :return: 
    '''
    dis=[ecu_dis(x_i,test) for x_i in x ]   # 计算距离(test 与各点的距离)
    kneighbors=np.argsort(dis)[:k]           # 倒序取 前k名对应的索引值  [6,5,9] 排序->[5,6,9]  对应的索引->[1,0,2]
    count=Counter(y[kneighbors])             # 根据索引值 可以得到y值
    return count.most_common()[0][0]        # 返回数量最大的y   类似词频分析. 返回数量对多的那个词

#预测结果

pre_value=[knn_cay(x_train,y_train,data,3) for data in x_test]
correct=np.count_nonzero((pre_value==y_test)==True)
print('准确率%.3f'% (correct/len(x_test)))



















 

展开阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 大白 设计师: CSDN官方博客
应支付0元
点击重新获取
扫码支付

支付成功即可阅读