KNN 算法和 K means算法和 Q-Learning 算法(简单的理解)

一·什么是 KNN 算法(监督学习)

用一个通俗易懂的话来说 KNN 算法就是近朱者赤,近墨者黑

就是比如我写一个 demo

注:sklearn 是 python 中的一个机器学习一个常用库

里面有 make_bolbs来生成点,当然我们也可以使用已经统计过的数据库

例如 iris 数据库

下面是一个简单的 knn 算法的实现过程

1.需要数据集(可以从 csv 也就是 execl 表中)这里我使用的是带标签的数据集的最常见的例子

2.需要数据集带有标签特征,因为 knn 算法是根据标签来判断的

3.需要待分析数据集,用来预测效果

python 复制代码
from sklearn.neighbors import KNeighborsClassifier
# 获取数据集iris
from sklearn.datasets import load_iris
# 设置k值为 1
knn=KNeighborsClassifier(n_neighbors=1)
# 将数据集iris实例化
# 其中 x 是带特征值的数据
# y是数据标签(类型)
iris=load_iris()
x=iris.data
y=iris.target
# 查看数据类型和特征值,我们下面使用的数据类型要遵守这个数据值
print(x.shape)
# 新建数据集输出是 150,4 证明有四个特征值
x_new=([[2,3,4,5],[1,2,4,2],[3,4,2,5])
# 生成训练集
knn.fit(x,y)
# 预测结果,返回为 标签值 0,1,2
knn.predict(x_new)

二·什么是 Kmeans 算法(非监督学习)

kmeans 算法是根据聚类的一种算法我们要根据具体的环境来判断这个环境中有几类物体

一句话说明白:根据特征值来判断物体的类别

一·knn 与 kmeans 的区别

1.kmeans 算法

比如这个动物有四条腿,并且可以发出喵喵的叫声,这时我们就是用 kmeans 算法来给这个小动物来分类为小猫。

2.knn 算法

比如我们有一个单词打错了,也就在词库里面没有这个单词,但是有和这个差不多的单词,可以通过 knn 来判断你可能输入的是哪一个单词

二·kmeans 算法的简单实现

具体实现可以看这里使用伪代码以便理解

这些特征值在算法中都使用特征向量来表示

1.首先我们需要确定初始值K

情况一

如果我们知道物体种类数就可以直接输入我们知道的物体种类数

情况二

但如果我们不清楚物体的种类数

我们可以通过肘部法则来确定物体的数目

一般情况下通过 SSE 的与 K 的值来判断,当 K 值变化时候出现拐点,一般情况下,这个点就是 K 值

初始化:随机K 个变量(从已有数据中选择)

2.重复直到收敛

1.分配步骤

计算数据集中的所有数据点距离K 点的距离,距离近的分配到这个 K 点上,形成 K 个簇

2.更新步骤

具有我们需要的判断的特征,并将这些特征的均值给计算出来,移动 K 个变量的特征值到平均特征值

3.检查收敛,如果不收敛继续回到第一步这个值我们可以自己设定一个值

如果下于我们设置的平均特征值并不收敛,我们要在在上一次的平均特征值的基础上计算离上一次平均质心的距离

3.最终的族数和质心

三·什么是 Q-learning 算法(强化学习)

那这里又引出一个概念

什么叫强化学习呢?

强化学习是通过奖励机制来实现的,最经典的例子要数走迷宫了

刚刚开始智能体在初始位置,运动到一个我们的迷宫出口,如果我们走一步,无论成功与否,都给这个智能体的 Q 值减少,如果走到陷阱 Q 值大量减少,走到出口 Q 的值大量增加

这就和我们平时的考试一样,如果给你考试好几次同样的卷子,你绝对会记住答案越考越高,因为分数高可以得到我们的父母的奖励

我们的强化学习也是类似的,也是通过不断的奖励,来使得我们的智能体记住路,从而使智能体自动规划的时候,按照最优解,这让我想起来一个电影,男主每天都死一次,到最后男主成为了每一个领域的专家

同样强化学习也只展示伪代码

Q-learning 需要的输入

1.env 环境(就像你考试时的卷子)

2.智能体相关(类比为人类学习速度的快慢很相似)

  • 学习率 α (0~1) 人们学习的速度越快的学习速度

α = 0.9 → 考试前一晚突击,第二天全忘 α = 0.1 → 每天学一点,形成长期记忆

  • 折扣因子 γ (0~1) 人们深远考虑时的眼光

γ = 0.1 → 有100块立刻花掉(短视) γ = 0.9 → 有100块存起来投资(远见)

  • 探索率 ε (0~1) 人们在遇见新问题解决方法的能力

ε = 0.9 → 每次都想尝试新餐厅(探索) ε = 0.1 → 总去那家熟悉的店(利用)

3.次数

训练回合数 episodes

下面有一个特别相似的 Q 表与人生决策的相关性

│ 你 = 智能体 (Agent)

│ 世界 = 环境 (Environment)

│ 你的选择 = 动作 (Action)

│ 你的处境 = 状态 (State)

│ 结果好坏 = 奖励 (Reward)

│ 人生经验 = Q表

Q-learning 的输出

就是我们的 Q 表了

Q-learning 的学习流程

1.初始化 Q 表

对所有的状态,行为都初始化为 0

2.重复 episode 次

2.1 重置环境,获取初始状态--通过 restart 方法来实现

直接调用对象方法就行,下面是重置的常使用的行为

python 复制代码
class MazeEnvironment:    
    def reset(self):
        """重置环境"""
        self.state = self.start
        return self.state
2.2如果当前回合未结束--迷宫没有走完
2.2.1选择动作ε策略

下面是伪代码

python 复制代码
if random_num >ε :
    a=random_move  #探索
else:
    # 执行Q值最大的操作
    a=argmax(Q[s])  #利用
2.2.2执行动作观察结果

s', r, done = 环境.执行(a)

s' = 新状态

r = 实时奖励

done 是否完成这件事情

2.2.3更新 Q 值

Q[s][a] = Q[s][a] + α × (目标 - 当前)

当前 = Q[s][a]

目标 = r + γ (及时奖励)× max(Q[s'])(未来最大价值)

2.2.4更新状态为s`

3.完成返回 Q 表

相关推荐
TL滕1 小时前
从0开始学算法——第六天(进阶排序算法)
笔记·学习·算法·排序算法
TL滕2 小时前
从0开始学算法——第六天(进阶排序算法练习)
笔记·python·学习·算法·排序算法
課代表2 小时前
正弦函数与椭圆的关系
数学·算法·几何·三角函数·椭圆·正弦·周长
zl_vslam2 小时前
SLAM中的非线性优-3D图优化之相对位姿Between Factor(七)
人工智能·算法·计算机视觉·3d
CoderYanger2 小时前
动态规划算法-简单多状态dp问题:12.打家劫舍Ⅱ
开发语言·算法·leetcode·职场和发展·动态规划·1024程序员节
一水鉴天2 小时前
专题讨论 类型理论和范畴理论之间的关系:闭关系/闭类型/闭范畴 与 计算式(ima.copilot)
开发语言·算法·架构
元素之窗2 小时前
MATLAB 的“面子工程”:一键切换数值显示风格 —— format 命令小记
开发语言·算法·matlab
云泽8082 小时前
蓝桥杯枚举算法精讲:从普通枚举到二进制枚举
算法·职场和发展·蓝桥杯
一水鉴天2 小时前
整体设计中的三个“闭”概念-闭集或度量空间:有序闭环Z、有界闭域R和有限闭群C
网络·人工智能·算法