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)))



















 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值