目录

3.1 sklearn转换器和估计器

3.1.1 转换器 - 特征工程的父类

3.1.2 估计器(sklearn机器学习算法的实现)

3.2 K-近邻算法

3.2.1 什么是K-近邻算法

3.2.3 案例1:鸢尾花种类预测

3.2.4 K-近邻算法总结

3.3 模型选择与调优

3.3.1 什么是交叉验证(cross validation)

3.3.2 超参数搜索 - 网络搜索(Grid Search)

3.3.3 鸢尾花案例增加k值调优

3.3.4 案例:预测facebook签到位置

3.4 朴素贝叶斯算法

3.4.1 什么是朴素贝叶斯分类方法

3.4.2 概率基础

3.4.3 联合概率、条件概率与相互独立

3.4.4 贝叶斯公式

3.4.5  API

3.4.6  案例:20类新闻分类

3.4.7 朴素贝叶斯算法总结

3.4.8 总结

3.5 决策树

3.5.1 认识决策树

3.5.2 决策树分类原理详解

3.5.3 决策树API

3.5.5 决策树可视化

3.5.4 案例:泰坦尼克号乘客生存预测

3.5.6 决策树总结

3.6 集成学习方法之随机森林

3.6.1 什么是集成学习方法

3.6.2 什么是随机森林

3.6.3 随机森林原理过程

3.6.6 总结

3.1 sklearn转换器和估计器

3.1.1 转换器 - 特征工程的父类

1、实用化(实例化的是一个转换器类(Transformer))

2、调用fit_transform(对于文档建立分类词频矩阵,不能同时调用)

标准化:

        (x - mean) / std

        fit_transform()

             fit()                  计算  每一列的平均值、标准差

             transform()      (x - mean) / std进行最终的转换

3.1.2 估计器(sklearn机器学习算法的实现)

估计器(estimator)

    1、实例化一个estimator

     2、estimator.fit(x_train,y_train)  计算

             ——调用完毕,模型生成

     3、模型评估:

                 1)直接比对真实值和预测值

                        y_predict = estimator.predict(x_test)

                        y_test == y_predict

                 2)  计算准确率

                        accuracy = estimator.score(x_test, y_test)

3.2 K-近邻算法

3.2.1 什么是K-近邻算法

KNN核心思想:你的“邻居”来推断出你的类别

1、K-近邻算法(KNN)原理

      k = 1       容易受到异常值的影响

     如何确定谁是邻居?

     计算距离:

     距离公式:

         欧氏距离

         曼哈顿距离(绝对值距离)

         明可夫斯基距离

2、电影类型分析

      k = 1 爱情片

      k = 2 爱情片

      ······

      k = 6 无法确定 

      k = 7 动作片

      k值取得过大,样本不均衡的影响

      k值取得过小,容易受到异常点的影响

结合前面的约会对象数据,分析K-近邻算法需要无量纲化的处理。

    标准化

sklearn.neighbors.KNeighborsClassifier(n_neighbors=5,algorithm='auto')

n_neighbors: k值

3.2.3 案例1:鸢尾花种类预测

      1)获取数据

      2)数据集划分

      3)特征工程

               标准化

      4)KNN预估流程

      5)模型评估

from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
from sklearn.neighbors import KNeighborsClassifier
from sklearn.model_selection import GridSearchCV


def knn_iris():
    """
    用KNN算法对鸢尾花进行分类
    :return:
    """
    # 1) 获取数据
    iris = load_iris()

    # 2) 划分数据集
    x_train,x_test,y_train,y_test = train_test_split(iris.data, iris.target,random_state=6)

    # 3) 特征工程: 标准化
    transfer = StandardScaler()
    x_train = transfer.fit_transform(x_train)
    x_test = transfer.transform(x_test)

    # 4) KNN算法预估器
    estimator = KNeighborsClassifier(n_neighbors=3)
    estimator.fit(x_train,y_train)

    # 5) 模型评估
    # 方法1:直接比对真实值和预测值
    y_predict = estimator.predict(x_test)
    print("y_predict:\n",y_predict)
    print("直接比对真实值和预测值:\n",y_test == y_predict)

    # 方法2:计算准确率
    score = estimator.score(x_test,y_test)
    print("准确率为:\n",score)

    return None

def knn_iris_gscv():
    """
    用KNN算法对鸢尾花进行分类,添加网格搜索和交叉验证
    :return:
    """
    # 1) 获取数据
    iris = load_iris()

    # 2) 划分数据集
    x_train,x_test,y_train,y_test = train_test_split(iris.data, iris.target,random_state=6)

    # 3) 特征工程: 标准化
    transfer = StandardScaler()
    x_train = transfer.fit_transform(x_train)
    x_test = transfer.transform(x_test)

    # 4) KNN算法预估器
    estimator = KNeighborsClassifier(n_neighbors=3)

    # 加入网格搜索与交叉验证
    # 参数准备
    param_dict = {'n_neighbors':[1,3,5,7,9,11]}
    estimator = GridSearchCV(estimator,param_grid=param_dict, cv=10)

    estimator.fit(x_train,y_train)

    # 5) 模型评估
    # 方法1:直接比对真实值和预测值
    y_predict = estimator.predict(x_test)
    print("y_predict:\n",y_predict)
    print("直接比对真实值和预测值:\n",y_test == y_predict)

    # 方法2:计算准确率
    score = estimator.score(x_test,y_test)
    print("准确率为:\n",score)

    # 最佳参数:best_params_
    print("最佳参数:\n",estimator.best_params_)
    # 最佳结果:best_score_
    print("最佳结果:\n",estimator.best_score_)
    # 最佳估计器:best_estimator_
    print("最佳估计器:\n",estimator.best_estimator_)
    # 交叉验证结果:cv_results_
    print("交叉验证结果:\n",estimator.cv_results_)


    return None



if __name__=='__main__':
    # 代码1:用KNN算法对鸢尾花进行分类
    knn_iris()
    # 代码2:用KNN算法对鸢尾花进行分类,添加网格搜索和交叉验证
    knn_iris_gscv()

3.2.4 K-近邻算法总结

优点:简单,易于理解,易于实现,无需训练

缺点:

1)必须指定K值,K值选择不当则分类精度不能保证

2)懒惰算法,对测试样本分类时的计算量大,内存开销大

使用场景:小数据场景,几千~几万样本,具体场景具体业务去测试

3.3 模型选择与调优

3.3.1 什么是交叉验证(cross validation)

交叉验证:将拿到的训练数据,分为训练集和验证集。

3.3.2 超参数搜索 - 网络搜索(Grid Search)

k的取值 [1,3,5,7,9,11]

暴力破解

3.3.3 鸢尾花案例增加k值调优

3.3.4 案例:预测facebook签到位置

流程分析:

       1)获取数据

       2)数据处理

       目的:

               特征值  

               目标值

               a.缩小数据范围

                2 < x < 2.5

                1.0 < y < 1.5

               b.time -> 年月日时分秒

               c.过滤签到次数少的地点

               数据集划分

         3)特征工程:标准化

         4)KNN算法预估流程

         5)模型选择与调优

         6)模型评估

3.4 朴素贝叶斯算法

3.4.1 什么是朴素贝叶斯分类方法

经过分类后取概率较大的作为结果。

3.4.2 概率基础

概率(Probability)定义:一件事发生的可能性

3.4.3 联合概率、条件概率与相互独立

· 联合概率:包括多个条件,且所有条件同时成立的概率

  记作:P(A,B)

  例如:P(程序员|喜欢),P(程序员,超重|喜欢)

· 条件概率:就是事件A在另一个事件B已经发生条件下的发生概率

   记作:P(A|B)

   例如:P(程序员|喜欢),P(程序员,超重|喜欢)

· 相互独立:如果P(A,B) = P(A)P(B),则称事件A与事件B相互独立。(充要)

3.4.4 贝叶斯公式

朴素的前提:假设特征与特征之间是相互独立的。

朴素贝叶斯算法:

      朴素 + 贝叶斯

应用场景:文本分类

                 单词作为特征

拉普拉斯平滑系数

目的:防止计算出的分类概率为0

3.4.5  API

· sklearn.native_bayes.MultinomialNB(alpha = 1.0)

     ~朴素贝叶斯分类

     ~ alpha:拉普拉斯平滑系数

3.4.6  案例:20类新闻分类

1)获取数据

2)划分数据集

3)特征工程

         文本特征抽取

4)朴素贝叶斯预估器流程

5)模型评估

3.4.7 朴素贝叶斯算法总结

· 优点:

   · 朴素贝叶斯模型发源于古典数学理论,有稳定的分类效率。

   · 对缺失数据不太敏感,算法也比较简单,常用于文本分类。

· 缺点:

    · 由于使用了样本属性独立性的假设,所以如果特征属性有关联时其效果不好

3.4.8 总结

· 条件概率、联合概率计算方式与特征独立的关系

· 贝叶斯公式的计算

3.5 决策树

3.5.1 认识决策树

如何高效的进行决策?

     特征的先后顺序

3.5.2 决策树分类原理详解

已知四个特征值 预测 是否贷款给某个人

先看房子,再工作 ——>是否贷款  只看了两个特征

年龄,信贷情况,工作     看了三个特征

信息论基础

1)信息

香农:消除随机不定性的东西。

小明  年龄  “我今年18岁”——是信息

小华   “小明明年19岁” ——不是信息(没有消除随机性)

2)信息的衡量 - 信息量 - 信息熵

H的专业术语称之为信息熵,单位为比特(bit)。

3) 信息增益

特征A对训练数据集D的信息增益g(D,A),定义为集合D的信息熵H(D)与特征A给定条件下D的信息条件熵H(D|A)之差,即公式为

g (D,A) = H(D) - H(D|A)

4) 决策树的划分依据之一 -------信息增益

3.5.3 决策树API

· class sklearn.tree.DecisionTreeClassifier(criterion='gini',

max_depth=None,random_state=None)

 ~ 决策树分类器

 ~ max_depth:树的深度大小

 ~ random_state:随机数种子 

3.5.5 决策树可视化

1、保存树的结构到dot文件

· sklearn.tree.export_graphviz()该函数能够导出DOT格式

       · tree.export_graphviz(estimator,out_file='tree.dot',feature_names=[","])

3.5.4 案例:泰坦尼克号乘客生存预测

  流程分析:

        特征值  目标值

1)获取数据

2)数据处理

          缺失值处理

          特征值 ——> 字典类型

3)准备好特征值 目标值

4)划分数据集

5)特征工程:字典特征抽取

6)决策树预估器流程

7)模型评估

3.5.6 决策树总结

· 优点:

     ~ 简单的理解和解释,树木可视化(可解释能力强)

· 缺点:

     ~ 容易产生过拟合

· 改进:

     ~ 减枝cart算法(决策树API当中已经实现,随机森林参数调优有相关介绍)

     ~ 随机森林

注:企业重要决策,由于决策树很好的分析能力,在决策过程应用较多,可以选择特征

3.6 集成学习方法之随机森林

3.6.1 什么是集成学习方法

集成学习通过建立几个模型组合的来解决单一预测问题。它的工作原理是生成多个分类器/模型,各自独立地学习和作出预测。这些预测最后结合成组合预测,因此优于任何一个单分类的做出预测。

3.6.2 什么是随机森林

在机器学习中,随机森林是一个包含多个决策树的分类器,并且其输出的类别是由个别树输出的类别的众数而定。

3.6.3 随机森林原理过程

训练集:

N个样本

特征值 目标值

M个特征

随机:

        训练集随机 —— N个样本中随机有放回的抽样N个

               bootstrap 随机有放回抽样

               [1,2,3,4,5]

               新的树的训练集

               [2,2,3,1,5]

         特征随机 —— 从M个特征中随机抽取m个特征    (M>>m为了降维)

3.6.6 总结

· 在当前所有算法中,具有极好的准确率

· 能够有效地运行在大数据集上,处理具有高维特征的输入样本,而且不需要降维

· 能够评估各个特征在分类问题上的重要性

Logo

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。

更多推荐