(Python机器学习)手动实现iris数据集knn分类

Python手写iris数据集knn分类器

knn分类

KNN分类算法(K-Nearest-Neighbors Classification),又叫K近邻算法,主要原理是通过计算待测试样本到所有的训练样本之间的距离,找到离测试样本最近的k个训练样本,之后将测试样本的类别分为最近的k个训练样本中类别标号最多的一类,原理相对简单。利用python中的numpy.array进行矩阵运算来计算距离。

对sklearn库中自带的iris数据集进行knn分类,划分30%的样例为测试集,计算每一个测试集样例到所有训练集样例的欧氏距离,选取距离最小的k个训练样例取得它们的类别标签,统计其中出现最多的类别标签,查看其与测试集样例原本的类别标签是否相同,最后输出测试集分类准确率

import numpy as np
from sklearn import datasets
from sklearn.preprocessing import StandardScaler
from sklearn.model_selection import train_test_split

iris = datasets.load_iris()
#从sklearn的datasets中读取iris数据集

k=5   #定义k值

#sc = StandardScaler()
#sc.fit(iris.data)
#sdata = sc.transform(iris.data)
# 数据标准化,将特征值减去平均值再除以极差

index=np.arange(150)
np.random.shuffle(index)
traindata,trainlabel,testdata,testlabel=iris.data[index[:105]],iris.target[index[:105]],iris.data[index[:45]],iris.target[index[:45]]
#随机选取105个样本做训练集,45个样本做测试集
result=np.zeros(testlabel.shape[0])   #保存结果

for n,l in enumerate(testdata):      
    dis=np.linalg.norm(traindata - l,axis=1)
    a = trainlabel[np.argsort(dis)[:k]]      
    result[n] = max(a, key=list(a).count)         

print('测试集准确率%.2f'%(list(result-testlabel).count(0)/len(testlabel))) 
``





```python
'''
使用sklearn中的KNeighborsClassifier对数据集进行knn分类
'''

import numpy as np
from sklearn import datasets
from sklearn.preprocessing import StandardScaler
from sklearn.model_selection import train_test_split
from sklearn.neighbors import KNeighborsClassifier
iris = datasets.load_iris()
#读取数据

sc = StandardScaler()
sc.fit(iris.data)
sdata = sc.transform(iris.data)
# 数据标准化,将特征值减去平均值再除以极差

traindata, testdata, trainlabel, testlabel=train_test_split(iris.data, iris.target, 
                                                            test_size=0.3,             #测试集占比为30%
                                                            #random_state=0,            随机数种子
                                                            #stratify=iris.target       保留原数据集比例   
                                                            ) 

knn = KNeighborsClassifier(n_neighbors=3)         
knn.fit(traindata,trainlabel)
predict = knn.predict(testdata)
print('分类准确率:',knn.score(testdata,testlabel)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值