K最近邻算法(介绍)

问题

用K最近邻算法创建分类系统
学习特征抽取
学习回归,即预测数值
学习K最近邻算法的应用案例和局限性

K最近邻(k-nearest neighbours, KNN)算法

K最近邻算法是指在一个坐标系中(前提是把元素放入坐标系【So,问题来了,怎么把他们放入坐标系?他们在坐标系的位置怎么确定?】),其中一个点的特性或者数值可以由离他最近的几个点求得,(原理是因为,他们所处的位置差不多,其会具有相当大的共性,他们之间更相似一些,这是一种猜测)
    想法一:其实不用坐标系也可以,可以使用集合,对于一个未知的集合,可以与其他集合做交集,与其交集最大的几个集合与他最相似
        【其实还是寻找共性,判断相似】
    【So,问题是什么叫相似?相似的程度如何判定?】

第一个问题:特征抽取

对于不同的系统,不同元素需要考虑的特点不同,可以根据自己的标准将各元素进行数字化,以一个数值集合的形式表示一个元素的特征,
    比如对于长方体,可以由长宽高三个标准度量,形成一个(x,y,z)的集合
能否挑选合适的特征事关KNN算法的成败

第二个问题:相似程度的判定

现在已经使用一套标准将元素数值化,
    一个元素可能有n个数值来表示,那么其就可以放入一个n维坐标系,
        虽然当维数超过4时,我们很难想象这个坐标系具体的样子,可是这并不妨碍我们计算相似程度【愚蠢的自信。。。】
    对于放入一个2维坐标系的两个点来说,一个为(x1,y1),另一个为(x2,y2),两点之间的距离为    sqrt( (x1-y1)^2 +(x2-y2)^2 )【这个叫毕达哥拉斯公式,其实就是求空间中两点的距离公式】,对于三维坐标系则是以此类推,
        我们使用这个公式的结果来比较元素之间的相似程度。
    【除了计算距离的方法,还有一种计算角度的方法,叫余弦相似度,要深入KNN还得再看看】

既然我们可以对一个未知元素根据其相邻元素判断他与其他元素的相似程度,那么可不可以猜测这个元素的特点(这里所说的特点不是将其定位在坐标系中的特点,是额外的特点)呢?

    可以,这就是回归。其实也是根据其最近的k近邻来推测他的特点。
    在对元素打标签时,需要使用合适的特征来判断元素。

机器学习简介

KNN算法对于机器学习可能很初级,不过正是因为简单,他反而可以让你很快的了解一下,还能有些理解。
机器学习是想让电脑更聪明,而KNN算法通过模仿人的解决方法,可以对一些行为做出预测,可以对大量元素进行分类,可以根据预测的结果进行推荐,看起来还是挺聪明的。

训练
    对于机器学习,首先要学会抽取元素的特征,这需要大量的例子,提取的特征可能很复杂,这一过程叫做训练,让他有些基础数据,要不怎么比对,也没法分类了。
朴素贝叶斯分类器
    在经过大量训练后,再接触到新的元素可以使用朴素贝叶斯分类器判断其属于某个类别的概率,这个和KNN挺像的
    至于朴素贝叶斯分类器怎么实现的,还没看。。。
由于没有具体的站内引用内容,以下是关于头歌平台上 k 最近邻算法的一般性介绍及可能的学习资源情况。 ### k 最近邻算法介绍 k 最近邻(k-Nearest Neighbors,简称 k-NN)算法是一种基本的分类与回归方法。其核心思想是给定一个训练数据集,对于新的输入实例,在训练数据集中找到与该实例最邻近的 k 个实例,然后根据这 k 个实例的类别(分类问题)或数值(回归问题)来决定新实例的类别或预测值。 在分类任务中,通常采用多数表决的方式,即这 k 个最近邻中哪个类别出现的次数最多,就将新实例分类为该类别;在回归任务中,一般是取这 k 个最近邻的平均值作为新实例的预测值。 ### 头歌平台的学习资源 头歌平台通常会提供丰富的关于 k 最近邻算法的学习资源,可能包括: - **理论课程**:以图文、视频等形式详细讲解 k 最近邻算法的原理、数学基础、算法流程等内容,帮助学习者建立扎实的理论基础。 - **代码实践**:提供在线编程环境,让学习者通过编写代码实现 k 最近邻算法。可能会有逐步引导的实践项目,例如使用 Python 中的`scikit-learn`库实现简单的 k-NN 分类或回归任务,代码示例如下: ```python from sklearn.neighbors import KNeighborsClassifier from sklearn.datasets import load_iris from sklearn.model_selection import train_test_split # 加载鸢尾花数据集 iris = load_iris() X = iris.data y = iris.target # 划分训练集和测试集 X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42) # 创建 k-NN 分类器,这里 k 值设为 3 knn = KNeighborsClassifier(n_neighbors=3) # 训练模型 knn.fit(X_train, y_train) # 进行预测 y_pred = knn.predict(X_test) # 输出预测结果 print("预测结果:", y_pred) ``` - **案例分析**:通过实际的案例,如手写数字识别、疾病诊断等,展示 k 最近邻算法在不同领域的应用,让学习者更好地理解算法的实际用途和优势。 - **习题与测评**:提供相关的练习题和测评机制,帮助学习者巩固所学知识,检验自己对 k 最近邻算法的掌握程度。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值