用原生python语法实现K近邻算法,了解K近邻法的实际操作内核,并用自带鸢尾花的集合验证K近邻算法,并掌握运用散点图的绘制
先对KNN算法做了解:
源代码获取:
https://github.com/akh5/Python/blob/master/My_KNN.ipynb
部分伪代码:
距离集合distyany2e对应的种类near_y集合
For 预测值 in near_y:
y0=0,y1=0,y2=0
预测结果=0
if 预测值 == 0:
y0+=1
elif 预测值 == 1:
y1+=1
else:
y2+=1
if y1>(y2 or y0):
预测结果 = 1
elif y2>( y1 or y0):
预测结果 = 2
else:
预测结果 = 0
结果集合
if 预测结果 == 训练集种类:
结果集合.append(1)
else:
结果集合.append(0)
此时结果集合中就只有0,1的元素了
若将 结果集合 中的各个元素相加,再处于集合长度就可以得到精确值
首先来从自带的包中获取鸢尾花的数据集
from sklearn.datasets import load_iris
import numpy as np
import matplotlib.pyplot as plt
iris_dataset = load_iris()
iris_dataset.keys()
dict_keys([‘data’, ‘target’, ‘target_names’, ‘DESCR’, ‘feature_names’, ‘filename’])
输出的是一个存放数据字典键值的list集合
iris_dataset['data'][:150]
array([[5.1, 3.5, 1.4, 0.2],
[4.9, 3. , 1.4, 0.2],
[4.7, 3.2, 1.3, 0.2],
[4.6, 3.1, 1.5, 0.2],
[5. , 3.6, 1.4, 0.2],
[5.4, 3.9, 1.7, 0.4],
[4.6, 3.4, 1.4, 0.3],
[5. , 3.4, 1.5, 0.2],
[4.4, 2.9, 1.4, 0.2],
[4.9, 3.1, 1.5, 0.1]])
数组中数据代表花萼长,花萼宽,花瓣长,花瓣宽
iris_dataset['target'][:150]
array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2])
返回的是鸢尾花的种类0为setosa,1为versicolor,2为virginica
from sklearn.datasets import load_iris
import numpy as np
import matplotlib.pyplot as plt
import random
raw_x = iris_dataset['data'][:150] #
raw_y = iris_dataset['target'][:<