模式识别实验二:k近邻算法(knn)(代码片段)

zstar-_ zstar-_     2023-01-30     190

关键词:

KNN是模式识别中的经典算法,本次实验就MNIST数据集来做KNN算法的实验,并结合前一次的LDA降维对数据进行进一步处理。

实验报告图片版

pdf版本可以戳这:模式识别实验报告:KNN K近邻算法

关键代码

KNN原理报告里有写,不作重复赘述。
本实验使用的编程环境是Jupyter,完整的程序代码可以戳这下载。
【模式识别】实验二:KNN,python程序代码与实验过程
这里仅贴上核心代码

MNIST数据集的导入

在本专栏之前一篇博文专门分析过,这里只上代码:

mnist = fetch_openml("mnist_784")
X, y = mnist['data'], mnist['target'] # X:data,y:label

特征标准化

特征标准化的好处:1、提高精度。2、提高计算速度

from sklearn.preprocessing import StandardScaler
from sklearn.model_selection import train_test_split

scaler = StandardScaler()
X_standardized = scaler.fit_transform(X1)

数据筛选

shuffle_index = np.random.permutation(60000)  # 随机排列一个序列,返回一个排列的序列。
X1, y1 = X[shuffle_index[:10000]], y[shuffle_index[:10000]]

对KNN来说,数据筛选是很有必要的。MNIST总共7w条数据,全部都跑会跑到天荒地老~
因此本实验随机筛选了10000条数据。

KNN实现方式一:调用sklearn的KNeighborsClassifier

from sklearn.neighbors import KNeighborsClassifier
from sklearn.model_selection import learning_curve
from sklearn import metrics

def knn(k):
    # 测试用,记录算法的时间
    # begin_t = t.time()
    #创建一个有5个邻居的KNN分类器对象
    knn = KNeighborsClassifier(n_neighbors=k, n_jobs=-1)

    #训练模型
    model = knn.fit(X_train, y_train)

    #预测数据
    predictions = model.predict(X_test)

    #测试准确率
    accuracy = metrics.accuracy_score(y_test, predictions)
#     print ("k=",k)
#     print ('accuracy:%.2f%%'%(100*accuracy))
    return 100*accuracy
    # print("Total time: :.2fs".format(t.time()-begin_t))

KNN实现方式二:手动实现

def knn(k):
    accuracy = 0
    m = X_train.shape[0] # m 标记预测值数量8000 ; n 标记测试集数量 2000
    n = X_test.shape[0]
    for i in range(n):
        count = np.zeros(10)
        prediction = 0
        distance = np.zeros((m,2))
        for t in range(m):
            distance[t,0] = y_train[t]              # 储存标签和欧式距离
            distance[t,1] = np.sqrt(sum(np.power(X_train[t] - X_test[i], 2)))  # 求欧式距离
        order = distance[np.lexsort(distance.T)]    # 按第二列(距离)排序
        for j in range(k):
            a = order[j,0]
            a = a.astype(int)
            count[a] += 1   
        prediction = count.argmax()                           # 取出现次数最多的为预测值
        if prediction == y_test[i]:
            accuracy += 1
    Accuracy = accuracy/n
    return 100*Accuracy  # 化成百分数形式

简要描述下算法思路:
1、逐次遍历测试集,对每个样本计算其和训练集的欧式距离。
2、将每个训练样本到该样本欧式距离排序,选取前K个训练样本。
3、统计这K个样本的标签,测试样本的标签即为这K个样本的最多的标签。

LDA降维

# 使用Fisher进行降维 
# 注:LDA最大降维数<分类数-1
# minsit为10分类,因此维度数可以取1-8
from sklearn.discriminant_analysis import LinearDiscriminantAnalysis as LDA
def mylda(X, y, demension):
    lda = LDA(n_components=demension)
    lda.fit(X, y)
    result_x = lda.transform(X)
    return result_x

总结

KNN需要计算每一个样本到训练样本的距离,因此训练样本越多,程序运行越慢;
优势在于程序无需经过训练,可以直接将样本进行判别分类。

机器学习分类算法--k近邻算法knn(代码片段)

一、K近邻算法基础KNN-------K近邻算法--------K-NearestNeighbors思想极度简单应用数学知识少(近乎为零)效果好(缺点?)可以解释机器学习算法使用过程中很多细节问题更完整的刻画机器学习应用的流程 importnumpyasnpimportmatplotlib... 查看详情

knn(代码片段)

...KNN分类算法 K最近邻(K-NearestNeighbor,KNN)算法,是著名的模式识别统计学方法,在机器学习分类算法中占有相当大的地位。它是一个理论上比较成熟的方法。既是最简单的机器学习算法之一,也是基于实例的学习方法中最基本的... 查看详情

机器学习实战☛k-近邻算法(k-nearestneighbor,knn)(代码片段)

机器学习实战☛k-近邻算法(K-NearestNeighbor,KNN)文章目录机器学习实战☛k-近邻算法(K-NearestNeighbor,KNN)k-近邻算法概述原理简介k-近邻算法一般流程伪代码与实现示例:使用kNN改进约会网站的配对效... 查看详情

k-近邻算法(knn)(代码片段)

K-近邻算法(KNN)1KNN介绍2KNN的初步使用3距离度量3.1基本性质3.2常见距离公式3.3距离属性4k值选择5KNN优化—kd树5.1kd树简介5.2构造方法5.3案例分析6数据集6.1获取数据集6.2划分数据集7特征工程—特征预处理7.1归一化7.2标准化... 查看详情

《机器学习实战》-k近邻算法(代码片段)

...测试算法:验证分类器使用算法:构建完整可用系统手写识别系统准备数据测试算法使用算法:构建完整可用系统总结K-近邻算法k-近邻分类算法概述使用k-近邻算法 查看详情

机器学习-k-近邻算法(代码片段)

...言算法介绍距离计算算法实现数据转换K值选取结语前言K-近邻算法(k-nearestneighborsalgorithm),又称为KNN算法,是这学期机器学习课教的第一个算法,也是我接触的第一个机器学习算法。学习之后的感触便是:机器学习和我想象的有... 查看详情

分类算法之k-近邻算法(knn)(代码片段)

一、k-近邻算法概述 1、什么是k-近邻算法如果一个样本在特征空间中的k个最相似(即特征空间中最邻近)的样本中的大多数属于某一个类别,则该样本也属于这个类别。2、欧式距离两个样本的距离可以通过如下公式计算,又叫... 查看详情

史诗级干货长文k-近邻算法(代码片段)

K-近邻算法前言1.K-近邻算法简介1.1什么是K-近邻算法1.2K-近邻算法(KNN)概念1.3电影类型分析1.4KNN算法流程总结2.KNN算法API初步使用2.1Scikit-learn工具介绍2.1.1安装Scikit-learn2.1.2Scikit-learn包含的内容2.2K-近邻算法API2.3案例2.3.1步骤分析2.3.2... 查看详情

k近邻算法——knn(代码片段)

KNN(K-NearestNeighbor)算法的核心思想是如果一个样本在特征空间中的k个最相邻的样本中的大多数属于某一个类别,则该样本也属于这个类别,并具有这个类别上样本的特性。该方法在确定分类决策上只依据最邻近的一个或者几个... 查看详情

机器学习之k-近邻(knn)算法(代码片段)

 一.K-近邻算法(KNN)概述   最简单最初级的分类器是将全部的训练数据所对应的类别都记录下来,当测试对象的属性和某个训练对象的属性完全匹配时,便可以对其进行分类。但是怎么可能所有测试对象都会找到... 查看详情

k-nearestneighbors(knn)k近邻算法(代码片段)

KNN算法是机器学习最简单的算法,可以认为是没有模型的算法,也可以认为数据集就是它的模型。它的原理非常简单:首先计算预测的点与所有的点的距离,然后从小到大排序取前K个最小的距离对应的点,统计前K个点对应的labe... 查看详情

基于k近邻的分类算法实践(python3)(代码片段)

目录基础知识实验环境实验数据实验步骤及代码(1)导入本次实验所需的包及数据(2)读入数据后,我们可以画出一些特征来观察数据的分布规律(3)刻画我们的距离函数(4)定义K近邻分类... 查看详情

机器学习实战task1(knn)k近邻算法的应用(代码片段)

1背景1.1k近邻算法的概述(1)k近邻算法的简介k-近邻算法是属于一个非常有效且易于掌握的机器学习算法,简单的说就是采用测量不同特征值之间距离的方法对数据进行分类的一个算法。(2)k近邻算法的工作... 查看详情

手写数字识别的k-近邻算法实现

...文为原创,请勿在未经允许的情况下转载)前言手写字符识别是机器学习的入门问题,k-近邻算法(kNN算法)是机器学习的入门算法。本文将介绍k-近邻算法的原理、手写字符识别问题分析、手写字符识别的kNN实现、测试。kNN算... 查看详情

机器学习机器学习分类算法--k近邻算法knn(下)(代码片段)

六、网格搜索与K邻近算法中更多的超参数七、数据归一化FeatureScaling解决方案:将所有的数据映射到同一尺度      八、scikit-learn中的Scalerpreprocessing.pyimportnumpyasnpclassStandardScaler:def__init__(self):self.mean_=None 查看详情

实验二k-近邻算法及应用

参考技术A(1)简单,易于理解,易于实现,无需估计参数。(2)训练时间为零。它没有显示的训练,不像其它有监督的算法会用训练集train一个模型(也就是拟合一个函数),然后验证集或测试集用该模型分类。KNN只是把样本... 查看详情

r语言学习笔记—k近邻算法(代码片段)

K近邻算法(KNN)是指一个样本如果在特征空间中的K个最相邻的样本中的大多数属于某一个类别,则该样本也属于这个类别,并具有这个类别上样本的特性。即每个样本都可以用它最接近的k个邻居来代表。KNN算法适合分类,也适... 查看详情

k-近邻算法(代码片段)

一、概述k-近邻算法(k-NearestNeighbouralgorithm),又称为KNN算法,是数据挖掘技术中原理最简单的算法。KNN的工作原理:给定一个已知标签类别的训练数据集,输入没有标签的新数据后,在训练数据集中找到与新数据最邻近的k个实... 查看详情