使用 KNN 对鸢尾花进行分析

要求:

(1)依据 KNN 的原理进行编程,完成对鸢尾花的分类
(2)直接调用函数对鸢尾花进行分类

 依据 KNN 的原理进行编程,完成对鸢尾花的分类

import numpy as np
import operator
from sklearn import datasets
# 引入numpy,operator以及sklearn

iris = datasets.load_iris()
data = iris.data
y = iris.target
# 导入数据集

def class_KNN(X,dataset,y,K):
    datasize = dataset.shape[0]     # 返回dataset的行数
    print(datasize)
    diff = np.tile(X,(datasize,1))-dataset  # tile可以在列上重复生成datasize个X
    # print( np.tile(X,(datasize,1)))
    distances = ((diff**2).sum(axis=1))**0.5
    print(diff**2)  # 输出与这朵花所有对应值得差的平方
    print(distances)    # 输出与这朵花的距离
    sort_distance = distances.argsort()
    # argsort()函数是将distances中的元素从小到大排列,提取其对应的index(索引),
    # 然后输出到sort_distance
    class_count = {}
    for i in range(K):  # 循环k次
        votelabel = y[sort_distance[i]]
        class_count[votelabel] = class_count.get(votelabel,0) + 1
        print(i)    # 0开始,输出这是第i次
        print (class_count) # 输出这i次,产生的结果类别
    sort_class_count = sorted(class_count.items(),key=operator.itemgetter(1),reverse=True)
    # class_count.items() 表示对字典class_count内的键进行排序,依据关键词“key”,
    # 而key等于键对应的值,也即根据fm和m的个数进行排序,reverse=True,表示倒序排。
    # operator模块提供的itemgetter函数用于获取对象的哪些维的数据,参数为一些序号
    # operator.itemgetter(1)表示对字典按照其键对应的值的大小进行排序
    # print (sort_class_count)
    return sort_class_count[0][0]  # 将[0][0]改为[0][1],看看结果

x = np.array([[5, 2.9, 1, 0.2]]) # 判断的某朵花
print(class_KNN(x,data,y,5))

直接调用函数对鸢尾花进行分类

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

iris_dataset = load_iris()
# 载入数据集
X = iris_dataset['data']
# X为鸢尾花数据集的data数据
y =  iris_dataset['target']
# y为鸢尾花数据集的target数据
X_train, X_test, y_train, y_test = train_test_split(X,y, test_size = 0.4,random_state=0)
# 划分数据集和训练集,测试集为20%
knn = KNeighborsClassifier(n_neighbors=1)
# 设置邻居数,使其标签与最近的n_neighbors=1,即最近的一个标签相同
knn.fit(X_train, y_train)
# 构建基于训练集的模型
X_new = np.array([[5, 2.9, 1, 0.2]])
# 一条测试数据

# 对X_new预测结果
prediction = knn.predict(X_new)
print("预测值%d" % prediction)

#得出测试集X_test测试集的分数
print("score:{:.2f}".format(knn.score(X_test,y_test)))

你可能感兴趣的:(Python,python,人工智能)