标签:main 优点 mamicode std alt splay 复杂 pat 复杂度
KNN(K-Nearest Neighbor) K 近邻算法,K近邻就是k个最近的邻居的意思,说的是每个样本都可以用它最接近的k个邻居来代表。KNN算法用于监督学习分类模型,预测结果是离散的机器学习算法。
KNN算法原理:
1、计算每个测试数据与每个训练数据的距离(相识度);
2、按照距离升序,对训练集数据进行排序;
3、获取距离最近的k个邻居,获取这k个邻居中的众数(取其中一个就行);
4、测试样本的预测结果就取众数的目标值。
KNN算法Python:手写数字案例
手写字为0,1构成的数字,为txt文件,首先我们将txt文件读取处理,32*32 展开成1024个特征值,txt文件名(7_151.txt)部分为目标值。
这样我们就可以构成训练集,测试集。
手写数字txt文件,读取,并以numpy.ndarray的形式分别存为train.npy, test.npy。
import numpy as np import os def build_data(file_path): """ 加载手写数字数据,转为numpy.ndarray :param file_path: 文件路径 :return: data_arr 保存后的np.narray """ file_name_list = os.listdir(file_path) data_arr = np.zeros(shape=(len(file_name_list), 1025)) for file_index, file_name in enumerate(file_name_list): file_content = np.loadtxt(file_path + ‘/‘ + file_name, dtype=np.str) file_str = ‘‘.join(file_content) data_arr[file_index, : 1024] = [int(s) for s in file_str] data_arr[file_index, -1] = int(file_name.split(‘_‘, 1)[0]) return data_arr def save_file(file_path, data): """ 保存训练集、测试集数据 :param file_path: 文件路径 :param data: 要保存的数据 :return: None """ if not os.path.exists(‘./data‘): os.makedirs(‘./data‘) np.save(‘./data/‘ + file_path, data) print("{}保存成功!".format(‘./data/‘ + file_path + ‘.npy‘)) def main(): train = build_data(‘./trainingDigits‘) test = build_data(‘./testDigits‘) print(train) print(train.shape) print(test) print(test.shape) save_file(‘train‘, train) save_file(‘test‘, test) if __name__ == ‘__main__‘: main()
加载数据
数据集、测试集,前1024列为特征值,最后一列为目标值。实现knn算法
score_list 对应k_list的准确率,k值不同,准确率不同。结果展示
KNN算法的优点:
1、非常简单的分类算法没有之一,人性化,易于理解,易于实现;
2、适合处理多分类问题,比如推荐用户;
3、可用于数值型数据和离散型数据,既可以用来做分类也可以用来做回归;
4、对异常值不敏感。
KNN算法的缺点:
1、时间复杂度,空间复杂度高;
2、k值不同,预测结果会不同;
3、惰性学习。
标签:main 优点 mamicode std alt splay 复杂 pat 复杂度
原文地址:https://www.cnblogs.com/bestwishfang/p/11869993.html