ML(二)

十一、支持向量机(SVM)分类

1、原理

    1)正确性原则 \
    2)安全性原则  | 支持向量机分类的依据就是寻找
    3)公平性原则  | 满足这四个原则的最优分类边界
    4)简单性原则 /
    正确性:训练样本被正确分类。
    安全性:支持向量间距最大化。
    公平性:边界离支持向量等距。
    简单性:线性超平面分类边界。

2、线性分类

    import sklearn.svm as svm
    model = svm.SVC(kernel='linear')
    代码:svm_line.py

3、非线性分类

    对于在原始维度空间无法线性分割的样本,可以通过所谓核函数提高样本的维度,以图在更高维度上做线性分割。
    kernel='poly' 多项式核函数
    y=w0 + w1x + w2x^2 + ... + wnx^n
    kernel='rbf' 径向基核函数,正态分布概率密度函数
    代码:svm_poly.py、svm_rbf.py
    对于类别比例严重失衡的训练样本,可以设置权重均衡参数:
    class_weight='balanced'
    其目的是通过权重的分配,让小比例样本的作用得到增强,以改善分类器的预测精度。

4、置信概率

    model = svm.SVC(..., probablity=True, ...)
    model.predict_proba(输入)->置信概率矩阵
                        类别1     类别2    类别3
    输入样本1     0.7         0.2        0.1   -> 类别1
    输入样本2     0.3         0.4        0.3   -> 类别2
    输入样本3     0.2         0.3        0.5   -> 类别3
    ...
    越接近分类边界的样本,对应每种类别的置信概率就越平均,分类越模糊,相反越远离分类边界的样本,对应每种类别的置信概率就极端,分类越明确。
    * (0.9, 0.1) - 极端,明确
    * (0.5, 0.4) - 平均,模糊
    --------------------------
    代码:svm_prob.py

5、网格搜索

    模型对象 = 模型类(..., 超参数1, 超参数2, ...)
    F1得分   F1得分
                                           10          20
                  max                  20          40
    max                                30          60
    比验证曲线更简单,功能更强大的模型优化策略。
    参数组合列表 = [{参数名: [取值列表], ...}, ...]
    model = ms.GridSearchCV(模型对象, 参数组合列表,
        cv=验证次数)
    model.fit(输入, 输出)
    (1)根据参数组合列表中的每一种超参数的组合,做cv次交叉验证,获得平均F1得分;
    (2)根据最佳平均F1得分所对应的超参数组合设置模型对象;
    (3)用提供给fit函数完整数据集训练模型对象;
    代码:svm_best.py

6、事件预测

    不是所有的字符串特征都能够使用标签编码器进行编码,如果字符串所代表的数据含义有连续特征,并且包含大小关系的语义,那么其编码值也应该体现一致的语义。
    代码:evt.py

7、流量预测

1 2 3  4 5 6  7 8 9
------ ------  ------
   1         2        3
代码:trf.py

十二、聚类

在未知输出标签的输入集中,利用输入样本之间的某种联系,建立划分模式和逻辑,将输入样本划分成不同的群落。

1、从人的视觉到机器的数觉

    一维: P(x1),Q(x2)
    PQ=sqrt((x1-x2)^2)
    二维:P(x1,y1),Q(x2,y2)
    PQ=sqrt((x1-x2)^2+(y1-y2)^2)
    三维:P(x1,y1,z1),Q(x2,y2,z2)
    PQ=sqrt((x1-x2)^2+(y1-y2)^2+(z1-z2)^2)
    N维:P(x1,x2,...,xn),Q(x1',x2',...,xn')
    PQ=sqrt((x1-x1')^2+(x2-x2')^2+...+(xn-xn')^2)
    欧几里得距离,欧氏距离

2、K均值算法

    聚类中心:任意一个聚类成员与该聚类中心的距离一定小于该成员与其它聚类中心的距离——向心性。
    几何中心:聚类中所有成员对应特征值的算术平均数表示的虚拟样本——抽象性。
    理想聚类:聚类中心与几何中心重合。
    在总样本空间中,随机选择K个样本作为初始聚类中心,计算所有样本距离每个聚类中心的欧氏距离,离哪个中心最近就隶属于该中心所表示的类别,这样就完成了一次聚类划分。针对所得到的每个聚类,计算其样本集的几何中心,如果几何中心与聚类中心不重合,以几何中心作为新的聚类中心重新计算每个样本与新中心的距离,得到新的聚类划分。再次计算其几何中心,直到每个聚类的几何中心与其划分所依据的聚类中心重合或足够接近为止。
    聚类数K需要事先知道。
           通过性能指标优选最好的K。
    初始聚类中心的选择可能会影响到最终的聚类划分结果。
           以最大间距原则选择初始聚类中心。
    代码:km.py
    图像量化
    代码:quant.py
    y = [0 0 1 1 2 2 3 3]
    centers = [100 200 300 400]
    image2 = [100 100 200 200 300 300 400 400]
    代码:quant.py

3、均值漂移算法

    将待划分聚类的样本空间看做服从某种统计规则的随机分布,利用已知概率密度曲线(面)拟合样本的统计直方图,由匹配度最佳的概率密度曲线(面)峰值可以确定每个聚类的中心位置,然后再根据每个样本距离各个聚类中心的远近,划分不同的聚类。
    均值漂移算法可以根据随机分布样本的疏密程度,自动识别聚类的个数(K),因此对于事先不知道聚类数,同时又没有显著几何中心特征的样本集,使用均值漂移算法具有明显的优势。
    K均值算法的聚类中心——几何中心---------\ 基于中心
    均值漂移算法的聚类中心——随机分布中心  / 的预测(predict)
    代码:shift.py

4、凝聚层次算法

    首先假定每个样本都是独立的聚类,计算聚类数,若其大于实现给定的聚类数,则将这些样本按照距离最近原则,两两结合,形成较少的聚类,重复以上过程,直到聚类数达到预期为止。
    实现给定聚类数。
    没有聚类中心,无法对训练集以外的样本进行类别预测。
    代码:agglo.py
    基于距离的凝聚——块状凝聚
    基于连续性的凝聚——线状凝聚
    代码:spiral.py

5、聚类的性能指标

    好聚类一定是内密外疏的聚类。
    通过轮廓系数表示聚类内密外疏的程度,即聚类器的性能。
    一个样本的轮廓系数:s = (b-a)/max(a,b),  (-1, 1)
    a:该样本与同聚类的其它样本的平均距离,即内部距离。
    b:该样本与离它所属聚类最接近的另一个聚类中各样本的平均距离,即外部距离。
    聚类模型的轮廓系数:S = ave(s), (-1, 1)
    ->-1:错误聚类
    ->1:理想聚类
    ->0:聚类重叠
    sm.silhouette_score(输入, 输出, sample_size=样本数,
        metric='euclidean')->轮廓系数得分

6、噪声密度(DBSCAN)算法

    朋友的朋友也是朋友。
    从任意一个样本出发,做以该样本为圆心,给定半径做圆,被该圆圈中的样本与该样本归属同一个聚类,再以这些被圈中的样本为圆心,按照同样的方法继续做圆,以囊括更多的样本加入该聚类,直到再没有新样本加入为止,即完成了一个聚类的划分。从剩余样本中任选一个,重复以上过程,以划分其它聚类,直到再没有未使用的样本为止。
    根据轮廓系数得分选择最优的划分半径。
    核心样本:用能力向所在聚类引入新样本的样本。
    外周样本:虽然身在聚类之内,但是无法再引入新的样本。
    孤立样本:所在聚类的规模太小,无法超过最小阈值。
    代码:dbscan.py

十三、 KNN算法

K - 若干个
N - Nearest,最近
N - Neighbors, 邻居

1、分类

    对于一个未知类别的样本,在其周围寻找距离最近的K个已知样本,根据与距离成反比的加权投票,决定未知样本的类别。
    代码:knnc.py
    对于类别比例相差悬殊的样本不适合用KNN法预测分类。

2、回归

    对于一个未知输出的样本,在其周围寻找距离最近的K个已知样本,根据与距离成反比的加权平均,决定未知样本的输出。
    代码:knnr.py
    对于预测输入远远偏离训练集的样本不适合用KNN法回归预测。
    ----------------------------------------------------------------
    回归问题:线性回归、岭回归、多项式回归、决策树、支持向量机、KNN
    分类问题:逻辑分类、朴素贝叶斯、决策树、支持向量机、KNN
    聚类问题:K均值、均值漂移、凝聚层次、DBSCAN
    ----------------------------------------------------------------

十四、推荐引擎

1、欧氏距离得分

    两个样本:
    A: [a1, a2, ..., an]
    B: [b1, b2, ..., bn]
    欧氏距离: e = sqrt((a1-b1)^2 + (a2-b2)^2 + ... +
                                   (an-bn)^2)
         0 <- e -> oo
      相似          不相似
    欧氏距离得分: es = 1 / (1 + e)
        0 <- es -> 1
    不相似         相似
    衡量两个样本相似度的指标。
    代码:es.py
         A    B    C
    A   1  0.6 0.7
    B 0.6   1   0.4
    C 0.7 0.4   1

2、皮氏距离得分

    相关性系数
    ave(dev(a)dev(b))
    ---------------------,    -1   <-  0    ->   1
        std(a)std(b)        反相关  不相关   正相关
                                       相反   不相似    很相似
    衡量两个样本相似度的指标。
    代码:ps.py

3、按照皮氏距离得分从高到低的顺序,为每个用户生成除其自身以外的相似用户清单

    代码:sim.py

4、推荐列表

    相似用户评价过而被推荐用户不曾评价。
    按推荐度的降序排列。
    如何计算推荐度?用被推荐者的评分根据相似用户的相似度做加权平均。
    代码:rcm.py

十五、文本识别(自然语言处理,NLP)

    人机交互:

           语音识别       文本识别
    语音-------->文本-------->语义
      __________________________
     |                                        v
    人                                 机器女友
    ^_________________________|

    语音<------- 文本<--------数据
           语音合成        业务逻辑

1.分词:根据语法规则,把整篇文档(文本集合)拆分成相对较小的语言单位,如句子或单词等。

    NLTK - 自然语言工具包
    代码:tkn.py

3.词干提取:在名词和动词中,除了与数和时态有关的成分以外的核心成分。

    词干并不一定是合法的单词。
    代码:stm.py

4.词型还原:复数名词->单数名词,分词->动词原型

        单词原型一定是合法的单词。
        代码:lmm.py

5.数学模型

    1)词典:一篇文档中所包含不同单词的有序序列。
    2)样本:按照句子对文档进行分词,一句为一样本。
    3)词袋(BOW):词典中每一个单词在每一个样本中出现的次数。
    4)词频(TF):对词袋做归一化,表示了词典中的每个单词对样本语义表现力贡献的大小。
    5)文档频率(DF):针对词典中的每一个单词,用包含该单词的样本数比上总样本数。单词越稀有,文档频率越小。单词的稀有度表现了该单词对样本可识别性贡献的大小。
    6)逆文档频率(IDF):1/文档频率
    逆文档频率^->文档频率v->单词稀有^->可识别性贡献^
    词频^----------------------------------->语义表现力贡献^
    7)词频逆文档频率(TF-IDF):词频 x log(逆文档频率),综合体现了单词对样本语义表现力和可识别性贡献的大小,即该单词可对每个样本的重要性的大小。
    -----------------------------------------------------------------
    The brown dog is running. The black dog is in the black room. Running in the room is forbidden.
    -----------------------------------------------------------------
    1 The brown dog is running
    2 The black dog is in the black room
    3 Running in the room is forbidden
    -----------------------------------------------------------------
             black brown dog forbidden in is room running the
    1          0         1        1           0          0  1    0           1         1
    2          2         0        1           0          1  1    1           0         2
    3          0         0        0           1          1  1    1           1         1
    词袋矩阵
          | 归一化
          v
    词频矩阵
    0.      0.2 0.2      0.     0.         0.2      0.       0.2   0.2
    0.25  0.   0.125 0.     0.125  0.125  0.125 0.     0.25
    0.      0.   0.        0.17 0.17   0.17     0.17   0.17 0.17
                                              X
    3/1   3/1 3/2    3/1  3/2     3/3       3/2    3/2   3/3
                                               |
                                              v
                                       TF-IDF矩阵
    代码:bow.py

6.主题识别

    关于不同主题文本素材
    TF-IDF          ->         主题标签
    ------------------------------------
    xxxxxxxxx    ->         二手市场  0
    xxxxxxxxx    ->         加密解密  1
    xxxxxxxxx    ->         摩托车     2
    xxxxxxxxx    ->         太空        3
    xxxxxxxxx    ->         棒球        4
    -----------------------------------
    xxxxxxxxx    ->                        ?
    代码:doc.py
    1 2 3 4 5 6
    2 3 0 0 1 4
    0 5 0 1 1 3
    ...
    多项分布朴素贝叶斯分类器

7.情感分析

    A   B   C
    1   2   3 -> {'A': 1, 'C': 3, 'B': 2}
    4   5   6 -> {'C':6, 'A': 4, 'B', 5}
    7   8   9 ...
    代码:sent.py

8.主题抽取

    将构成文档的每个句子视为独立的样本,通过词频逆文档频率将其转换为是一个数值向量,该向量表达了样本中不同单词的价值分布。语义相似的样本,即主题相同的句子,其单词的价值分布必然相近,通过聚类的方法(隐含狄利克雷分布)划分出不同的主题集群,在聚类中心附近选取密度较高的样本,从中提取价值最高的若干单词,作为主题的标签。
    代码:topic.py

十六、语音识别

1.梅尔频率倒谱系数(MFCC)矩阵

    首先将音频输入按照时间顺序划分为若干片段,将每个片段做傅里叶变换,得到相对应的频率分布,从中提取与人类语言内容相关性最强的十三的特征频率所对应的能量强度,构成一个样本。将从每个片段中所获得的频率样本按行组成一个矩阵,即梅尔频率倒谱系数(MFCC)矩阵。MFCC矩阵反映了该音频输入的内容特征,可被用于对语音内容的识别。
    代码:mfcc.py

2.语音识别

    apple
         xxx.wav -> MFCC \
         xxx.wav -> MFCC  > MFCC -> HMM \  0.8
         ...                            /                                |
    lime                                                          MFCC <- xxx.wav
         xxx.wav -> MFCC \                                |                 |
         xxx.wav -> MFCC  > MFCC -> HMM /  0.9 max v
         ...                            /                                               lime
    代码:spch.py

十七、图像识别

1.OpenCV,开源计算机视觉库

    代码:opencv.py

2.边缘识别

    代码:canny.py

3.直方图均衡化

    代码:eq.py

4.结构特征

    代码:star.py

5.图像的特征描述矩阵

    图像的特征描述矩阵来源于反映图像中物体结构特征关键点的空间直方图。
    代码:desc.py

6.基于特征描述矩阵的图像物体识别

    代码:obj.py

十八、人脸识别

1.视频捕捉

    代码:vidcap.py

2.人脸定位

    代码:haar.py

3.人脸识别

    代码:face.py

posted on 2019-10-21 12:27  破天荒的谎言、谈敷衍  阅读(140)  评论(0)    收藏  举报

导航