鸢尾花(iris)数据集包含150条鸢尾花的数据,每条包含四个参数和一个标签,我们需要根据四个参数来预测出当前这朵花属于哪个类别。
KNN(K Nearest Neighbors)算法是经典的懒惰学习算法,也就是说它没有训练过程,直接根据已有数据进行预测。KNN基于这样一个假设:对当前要预测的数据t,找到和t最相似的k个已知标签的训练数据,然后获取这k条训练数据的标签,把出现次数最多的标签作为t的预测标签。从这个思想中我们可以看出,对于KNN来说,如果数据集中标签数量较少则效果会比较好,如果标签过多,很可能出现与t相似的数据只有非常少的几条,这种情况下就很难得到准确的分类。
代码如下:
# -*- coding=utf8 -*-
from sklearn import datasets
import numpy as np
from sklearn.manifold import TSNE
from sklearn.decomposition import PCA
import matplotlib.pyplot as plt
def get_data():
# 从sklearn的数据集中获取iris数据
iris =datasets.load_iris()
# 洗乱数据
indices = np.arange(len(iris.data))
np.random.shuffle(indices)
# 查看数据的形状
print(iris.data.shape)
print(iris.target.shape)
print(type(iris))
print(type(iris.data))
# 分割训练数据集和测试数据集
split_index = int(len(iri