IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 人工智能 -> 机器学习笔记 -> 正文阅读

[人工智能]机器学习笔记

KNN算法

kNN 算法其实是众多机器学习算法中最简单的一种,因为该算法的思想完全可以用 8 个字来概括:“近朱者赤,近墨者黑”。

假设现在有这样的一个样本空间,该样本空间里有宅男和文艺青年这两个类别,其中红圈表示宅男,绿圈表示文艺青年。如下图所示:
在这里插入图片描述

其实构建出这样的样本空间的过程就是 kNN 算法的训练过程。可想而知 kNN 算法是没有训练过程的,所以 kNN 算法属于懒惰学习算法。

假设我在这个样本空间中用黄圈表示,如下图所示:
在这里插入图片描述

现在使用 kNN 算法来鉴别一下我是宅男还是文艺青年。首先需要计算我与样本空间中所有样本的距离。假设计算得到的距离表格如下:

样本编号121314
标签宅男宅男文艺青年文艺青年
距离11.29.523.337.6

然后找出与我距离最小的 k 个样本(k 是一个超参数,需要自己设置,一般默认为 5),假设与我离得最近的 5 个样本的标签和距离如下:

样本编号45678
标签宅男宅男宅男宅男文艺青年
距离11.29.57.75.815.2

最后只需要对这 5 个样本的标签进行统计,并将票数最多的标签作为预测结果即可。如上表中,宅男是 4 票,文艺青年是 1 票,所以我是宅男。

注意:有的时候可能会有票数一致的情况,比如 k=4 时与我离得最近的样本如下:

样本编号 4 9 11 13
标签 宅男 宅男 文艺青年 文艺青年
距离 4.2 9.5 7.7 5.8
可以看出宅男和文艺青年的比分是 2:2,那么可以尝试将属于宅男的 2 个样本与我的总距离和属于文艺青年的 2 个样本与我的总距离进行比较。然后选择总距离最小的标签作为预测结果。在这个例子中预测结果为文艺青年(宅男的总距离为 4.2+9.5,文艺青年的总距离为 7.7+5.8)。

  • kNN 算法的优点
    原理简单,实现简单;
    天生支持多分类,不像其他二分类算法在进行多分类时要使用 OvO、 OvR 的策略。
  • kNN 算法的缺点
    当数据量比较大或者数据的特征比较多时,预测过程的时间效率太低。

python sklearn中含有可以实现KNN的模板代码如下

from sklearn.neighbors import KNeighborsClassifier
from sklearn.preprocessing import StandardScaler
import numpy as np
#KNN分类器模板

def classification(train_feature, train_label, test_feature):
    '''
    对test_feature进行分类
    :param train_feature: 训练集数据,类型为ndarray
    :param train_label: 训练集标签,类型为ndarray
    :param test_feature: 测试集数据,类型为ndarray
    :return: 测试集数据的分类结果
    '''
    # 实例化StandardScaler函数,StandardScaler函数可以预处理样本数据和预测数据(标准化或归一化处理)
    scaler = StandardScaler()
    
    train_feature = scaler.fit_transform(np.array(train_feature))
    # 使用标准化处理样本数据,标准化较归一化更合理具有弹性
    # train_feature = scaler.transform()为归一化处理方法
    # 标准化与归一化的区别见https://www.zhihu.com/question/361290840#:~:

    test_feature = scaler.fit_transform(np.array(test_feature))
    # 同理使用标准化处理测试数据

    # 生成K近邻分类器
    clf = KNeighborsClassifier()
    # 训练分类器
    clf.fit(train_feature, train_label)
    # 进行预测
    predict_result = clf.predict(test_feature)
    return predict_result
    # ********* End **********#


当我们的kNN算法需要不同的参数时,上面的代码就不能满足我的需要了。所需要做的改变是在
clf=KNeighborsClassifier()这一行中。KNeighborsClassifier()的构造函数其实还是有其他参数的。
比较常用的参数有以下几个:

  • n_neighbors,即K近邻算法中的K值,为一整数,默认为5;
  • metric,距离函数。参数可以为字符串(预设好的距离函数)或者是callable(可调用对象,大家不明白的可以理解为函数即可)。默认值为闵可夫斯基距离;
  • p,当metric为闵可夫斯基距离公式时,上文中的q值,默认为2。

在使用kNN算法进行分类器时,我们是这样子使用sklearn库的:

from sklearn.neighbors import KNeighborsClassifier
clf=KNeighborsClassifier() #生成K近邻分类器
clf.fit(train_feature, train_label)               #训练分类器
predict_result=clf.predict(test_feature)           #进行预测

而对应的,当我们需要使用kNN算法进行回归器时,只需要把KNeighborsClassifier换成KNeighborsRegressor即可。代码如下:

from sklearn.neighbors import KNeighborsRegressor
clf=KNeighborsRegressor() #生成K近邻分类器
clf.fit(train_feature, train_label)               #训练分类器
predict_result=clf.predict(test_feature)           #进行预测

KNeighborsRegressor和KNeighborsClassifier的参数是完全一样的

感知机

如果说KNN算法每次预测一个数据,都需要计算他和所有样本的距离,那不如一次性根据样本找到一个超平面直,根据超平面接划分数据

  • 感知机的定义是什么?
    感知机(perceptron)是二类分类的线性分类模型,其输入为实例的特征向量,输出为实例的类别。
  • 感知机的取值是什么?
    取+1和-1二值。
  • 感知机对应于输入空间(特征空间)中的什么?
    感知机对应于输入空间中将实例划分为正负两类的分离超平面,属于判别模型。
  • 感知机学习的目的是什么?
    感知机学习旨在求出将训练数据进行线性划分的分离超平面,为此,导入基于误分类的损失函数,利用梯度下降法对损失函数进行极小化,求得感知机模型。
  • 感知机学习算法有什么特点?
    感知机学习算法具有简单,并且易于实现的特点,分为原始形式和对偶形式。
  • 什么是感知机预测?
    感知机预测是用学习得到的感知机模型对新的输入实例进行分类。它是神经网络与支持向量机的基础。

这里,我们利用西瓜书上的例子来构造数据,实例中包括特征和类别。一共构造了帮助预测的特征一共有 30 个:色泽、根蒂、敲声等等。类别为是好瓜与不是好瓜。部分数据如下:
在这里插入图片描述

由于我们的模型只能对数字进行计算。所以,我们用x1表示色泽,x2表示根蒂,x3表示敲声 。y 表示类别。
其中,x1=0,表示青绿,x2=2,表示稍蜷, y=-1,表示不是好瓜。具体如下图:
在这里插入图片描述
而我们的任务就是,用感知机算法建立一个模型,利用训练集上的数据对模型进行训练,并对测试集上的数据进行分类。

比如说,输入的特征值分别是青绿,蜷缩,浊响对应特征向量为 (0,0,0)。
感知机模型会将每一个特征值xi乘以一个对应的权重wi,再加上一个偏置 b,所得到的值如果大于等于 0,则判断为 +1 类别,即为好瓜,如果得到的值小于 0,则判断为 -1 类别,即不是好瓜。数学模型如下:
在这里插入图片描述

其中x i为第 i 个特征值,wi为第 i 个特征所对应的权重,b 为偏置。

  • 感知机算法流程
    我们能否正确对西瓜好坏进行预测,完全取决于权重与偏置的值是否正确,那么如何找到正确的参数呢?方法与逻辑回归相似,这里就不重复叙述,唯一不同的就是感知机模型所用的损失函数。

那么,感知机使用的损失函数是怎么样的呢?
感知机采用的损失函数最初采用的是误分类点到决策边界的距离:
在这里插入图片描述

在这里插入图片描述
了解更多见知乎分享.
其中感知机也同样有代码模板

from sklearn.linear_model.perceptron import Perceptron

clf = Perceptron()
clf.fit(train_data, train_label)
result = clf.predict(test)
  人工智能 最新文章
2022吴恩达机器学习课程——第二课(神经网
第十五章 规则学习
FixMatch: Simplifying Semi-Supervised Le
数据挖掘Java——Kmeans算法的实现
大脑皮层的分割方法
【翻译】GPT-3是如何工作的
论文笔记:TEACHTEXT: CrossModal Generaliz
python从零学(六)
详解Python 3.x 导入(import)
【答读者问27】backtrader不支持最新版本的
上一篇文章      下一篇文章      查看所有文章
加:2021-10-27 12:50:24  更:2021-10-27 12:53:22 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/27 8:37:29-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码