【学习记录】有监督学习和无监督学习的概念理解

【学习记录】有监督学习和无监督学习的概念理解(机器学习)

1.有监督学习

有监督学习可以说是一种分类问题,通过已有的训练样本(已知数据及其对应的输出)去训练一个得到一个最优模型(模型是某个函数的集合,这里的最优模型是指在某个评价准则下的最优,具体问题具体分析)。再利用这个训练出来的模型将所有的输入映射成为相应的输出,对输出进行判断从而实现分类的目的。

这里我们可以通俗的说,就类似我们小时候在识事物,老师和家长会告诉你这是什么东西,这就是已知数据及其对应的输出,然后我们的脑子里会慢慢的形成一个泛化的意识,这个意识就是我们训练出来的模型(一种函数对应关系)。我们通过我们的意识看到某种东西,就可以反应出这是什么,这就是将所有的输入映射成为相应的输出。

KNN算法
KNN算法概念理解

KNN算法的核心思想是用距离目标数据最近的k个样本数据的分类来代表目标数据的分类。因此KNN也叫k-邻近算法。

我们可以先通俗的理解一下,比如判断我的职业,KNN就是通过人以群分的方法,如果我的身边的朋友多数是程序员,那么即判定我是个程序员。

如下图所示,我们存在一个训练样本集,而在样本集中存在特征目标变量这两个概念,特征在下图中即图标的空间坐标,目标变量即图标的分类(三角形还是正方形)。因此我们在输入一个新的不含目标变量的数据(还未被分类),我们就通过KNN来判断他的目标变量。

简单演示一下KNN的过程(判断绿色圆的目标变量):
当k=3时,距离绿色圆最近的三个图标有两个为三角形,一个为正方形,我们判断未知数据的目标变量为三角形。
当k=5时,距离绿色圆最近的五个图标有两个为三角形,三个为正方形,我们判断未知数据的目标变量为正方形。
img

KNN的优缺点

优点:算法简单,易于理解。对异常值不敏感(双刃剑)

缺点:结果受k值的影响大,k值的取值会影响结果的判定(k一般不超过20)。算法计算量大,需要计算每个样本的距离,虽然理解简单,但是不断的计算,不够优化。且当样本的分布不平衡的话,就无法准确判断(比如我是一个老师,但是我经常和程序员打交道,身边的朋友程序员占绝大多数,因此训练时我的身份被判定为程序员)。

KNN算法的流程

(1)数据集的整理:有监督学习需要一个训练样本

(2)计算输入的测试数据和每个训练样本的数据的距离(两个公式)

  • 欧 式 距 离 公 式 : d ( x , y ) = ∑ i = 1 n ( x i − y i ) 2 欧式距离公式:d(x,y)=\sqrt {\sum_{i=1}^n(x_{i}-y_{i})^2} d(x,y)=i=1n(xiyi)2

曼 哈 顿 距 离 公 式 : d ( x , y ) = ∑ i = 1 n ∣ x i − y i ∣ 曼哈顿距离公式:d(x,y)=\sum_{i=1}^n|x_{i}-y_{i}| d(x,y)=i=1nxiyi

(3)按照距离递增排序

(4)选距离最近的k个点

(5)判断这个k点的分类概率

(6)将返回的最高的分类概率,该分类及测试数据的分类

KNN算法分类器
#KNN算法分类器函数
from numpy import *
import operator

#函数参数:(测试数据,训练数据,分类标签,k值)
def classify(inX,dataSet, labels, k):
    #dataSet.shape[0]指数据行数
    dataSetSize = dataSet.shape[0]
    '''
    我们模拟一下下面的计算过程
    假设测试数据(即输入)为[1,0,1]
    训练数据为
    [2,1,3]
    [1,2,3]
    [0,3,1]
    ==>
    将测试数据域训练数据进行相减,得到
    ==>
    [-1,-1,-2]
    [0,-2,-2]
    [1,-3,0]
    ==>
    将相减结果进行平方,得到
    ==>
    [1,1,2]
    [0,2,2]
    [1,3,0]
    ==>
    将其相加
    ==>
    [4]
    [4]
    [4]
    ==>
    开方
    ==>
    [2]
    [2]
    [2]
    ==>
    排序得[2,2,2]
    '''
    #相减
    diffMat = tile(inX,(dataSetSize,1))-dataSet
    #平方
    sqDiffMat=diffMat**2
    #相加
    sqDistances=sqDiffMat.sum(axis=1)
    #开方
    distances=sqDistances**0.5 #计算欧式距离
    #排序
    sortedDistIndicies=distances.argsort() #排序并返回index

    #选择距离最近的k个值
    classCount={}
    for i in range(k):
        voteIlabel=labels[sortedDistIndicies[i]]
        #计算每个类别出现的频率
        classCount[voteIlabel]=classCount.get(voteIlabel,0)+1
    #排序
    sortedClassCount=sorted(classCount.items(),key=operator.itemgetter(1),reverse=True)
    return sortedClassCount[0][0]
SVM算法
SVM算法概念理解

通俗理解:判断我是哪里人,比如福建和浙江的交界处是一条分割线,我在分割线靠福建这块,就判断我为福建人,反之则为浙江人。
特征向量映射到空间的数据,有不同的目标变量(即分类),SVM的目的就是画出一条准确的线来区分这两种类别,在我们后续输入新的测试数据照样能很好的分类。
img

SVM算法的小知识

(1)SVM算法可以画出很多条分界线,但是每一条的效果不一样,如上图所示,绿线明显效果不好,蓝线还算凑合,红线的区分效果明显比较好。我们把最好的那条分界线称之为划分超平面(超平面指特征如果是高维的,这样的样本空间的最佳分界是一个超平面)
(2)在SVM算法训练出的分界中,以边际最大的的超平面称为划分超平面。边际指在里分界线(面)两边最近的两个样本数据的距离(如下图)。

img
算法会尽量的让边际变得更大,因为这样使得分类的犯错率减小。

SVM特性
  • 算法的复杂度取决于支持向量(这里的支持向量即坐落在边际超平面上的点),与数据维度的高低关联不大,因此SVM不容易产生过拟合。
  • SVM在训练时需要将空间中不是支持向量的点舍去(可以理解为我们将离超平面距离远的点舍去,以降低算法的复杂程度)
  • 若训练的样本(支持向量)过少的话,SVM训练出的算法容泛化
SVM算法的推导公式

https://blog.csdn.net/d__760/article/details/80387432

2.无监督学习

无监督学习的输入数据没有被标记,也无法通过输入已知他的输出结果。样本的数据类别是未知的,然后我们通过样本之间的相似程度对样本集进行分类(聚类)。通俗理解:儿童去动物园,不知道这个动物是啥,但是参观了一天下来,会发现老虎狮子是体型大的动物,兔子猴子是体型小的动物。类似这样去把所输入的知识通过数据间的相似性区分开来。(数据如下图)

在这里插入图片描述
推荐参考文章:https://blog.csdn.net/qq_29373285/article/details/82529333

3.无监督学习和有监督学习的采用

(1)当我们有一个训练样本时(已标记)可以采取有监督学习(优先考虑)和无监督学习。但是如果正负样本的分布具有偏差(有小有大),那么这时我们有监督学习的效果就不如无监督学习了。(这里可以自己脑补上述KNN算法和SVM算法数据不平衡时的情况)
(2)当无训练样本一定不能使用有监督学习的方法。(没有分类无从下手)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值