目录

4.1 线性回归

4.1.1 线性回归原理

4.1.2 什么是线性回归

4.1.2 线性回归的损失和优化原理(理解记忆)

4.1.3 线性回归API

4.1.4 波士顿房价预测

4.1.5 拓展 ——关于优化方法GD、SGD、SAG

4.1.6 总结

4.2 欠拟合与过拟合

4.2.1 什么是过拟合与欠拟合

4.2.2 原因以及解决办法

4.3 线性回归的改进——岭回归

4.4 分类算法——逻辑回归与二分法

4.4.1 逻辑回归的应用场景

4.4.2 逻辑回归的原理

4.4.3 逻辑回归API

4.4.4  案例:癌症分类预测-良/恶性乳腺癌肿瘤预测

4.4.5 分类的评估方法

4.5 模型保存和加载

4.5.1 sklearn模型的保存和加载API

4.5.2 线性回归的模型保存加载案例

4.6 无监督学习——K-means算法

4.6.1 什么是无监督学习

4.6.2 无监督学习包含算法

4.6.3 K-means原理

4.6.4 K-meansAPI

4.6.5 案例:K-means对Instacart Market用户聚类

4.6.6 Kmeans性能评估指标

4.6.7 K-means总结


4.1 线性回归

4.1.1 线性回归原理

回归问题:

目标值——连续型的数据

应用场景:房价预测、销售额度预测、金融(贷款额度预测)

4.1.2 什么是线性回归

定义:线性回归是利用回归方程(函数)对一个或多个自变量(特征值)和因变量(目标值)之间关系进行建模的一种分析方式。

注:简单来说,一种是统计的说法,一种是机器学习中的说法,两者无非就是

函数关系   特征值和目标值 

线性模型

数据挖掘基础

y = 0.7x1 + 0.3x2

期末成绩 :0.7x考试成绩 + 0.3x平时成绩

广义线性模型

       ~ 非线性关系

线性模型:

自变量一次

y = w1x1 + w2x2 + w3x3 + ......+ wnxn + b

参数一次

y = w1x1 + w2x1^2 + w3x1^3 + w4x2^3 +......+ b

注:线性关系一定是线性模型,线性模型不一定是线性关系。

4.1.2 线性回归的损失和优化原理(理解记忆)

目标:求模型参数

          模型参数能够使得预测准确

真实关系

随意假定

损失函数/cost/成本函数/目标函数:

       最小二乘法

优化损失

1、损失函数

优化方法

      正规方程  ~ 天才 —— 直接求解w 

      拓展:

      1) 求函数最小值     

                y = ax^2 + bx + c

                y' = 2ax + b  令y' = 0

                x = -b/2a

       2) 矩阵求幂

              a * b = 1          (a,b均不为0)

                   b = 1/a = a^-1

             A * B = E        (矩阵A乘以矩阵B等于单位矩阵E)

            [[1 , 0 , 0]

            [0 , 1 , 0 ]

            [0 , 0 , 1]]

            B = A ^ -1

                 

      梯度下降  ~ 勤奋努力的普通人 —— 试错、改进

2、优化算法

迭代法每次减一下,\alpha理解为学习率,每次沿着坡度最陡的方向每次下降的步长,\alpha后面的理解为每次沿着坡度最陡的方向每次下降的方向。

注:机器学习的学习过程就是梯度下降、不断迭代试错的过程,根据上一步的错误不断试错改进。

4.1.3 线性回归API

4.1.4 波士顿房价预测

流程:

1)获取数据集

2)划分特征工程

3)特征工程:

             无量纲化 ——标准化

4)预估器流程

               fit()  -- > 模型

               coef_intercept_

5)模型评估 

回归的模型性能评估:

          均方误差

正规方程与梯度下降对比

4.1.5 拓展 ——关于优化方法GD、SGD、SAG

1、GD

梯度下降(Gradient Descent),原始的梯度下降法需要计算机所有样本的值才能够得到梯度,计算量大,所以后面才有会一系列的改进。

2、SGD

随机梯度下降(Stochastic gradient descent)是一个优化方法,它在一次迭代时只考虑一个训练样本。

· SGD的优点:

    ~高效

    ~易于实现

· SGD的缺点:

     SGD需要许多超参数:比如正则项参数、迭代数。

     SGD对于特征标准化是敏感的。

3、SAG

随机平均梯度法(Stochastic Average Gradient),由于收敛的速度太慢,有人提出SAG等基于梯度下降的算法

Scikit-learn : 岭回归、逻辑回归等当中都会有SAG优化

4.1.6 总结

· 线性回归的损失函数——均方误差

· 线性回归的优化方法

  正规方程

  梯度下降

· 线性回归的性能衡量方法——均方误差

· sklearn的SGDRegressor API 参数

4.2 欠拟合与过拟合

4.2.1 什么是过拟合与欠拟合

训练集上表现得好,测试集上不好——过拟合

训练集和测试集上表现都不好——欠拟合

定义:

· 过拟合:一个假设在训练数据上能够获得比其他假设更好的拟合,但是在测试数据集上却不能很好地拟合数据,此时认为这个假设出现了过拟合的现象。(模拟过于复杂)

· 欠拟合:一个假设在训练数据上不能获得更好的拟合,并且在测试数据集上也不能更好地拟合,此时认为这个假设出现了欠拟合的现象。(模型过于简单)

4.2.2 原因以及解决办法

· 欠拟合原因及解决办法

  原因:学习到数据的特征过少

  解决办法:增加数据的特征数量

· 过拟合原因及解决办法

   原因:原始特征过多,存在一些嘈杂特征,模型过于复杂是因为模型尝试去兼顾各个测试数据点

· 解决办法:正则化

1、正则化类别

1)L2正则化(更常用)

作用:可以使得其中一些w的都很小,都接近于0,削弱某个特征的影响

优点:越小的参数说明模型越简单,越简单的模型则越不容易产生过拟合现象

  • Ridge回归 —— 岭回归
  • 加入L2正则化后的损失函数:
  • 损失函数 + \lambda惩罚项

2)L1正则化

损失函数 + \lambda惩罚项

作用:可以使其中一些w的值直接为0,删除这个特征的影响

LASSO回归

4.3 线性回归的改进——岭回归

岭回归,其实也是一种线性回归,只不过在算法建立回归方程的时候,加上正则化的限制,从而达到解决过拟合的效果

4.3.1 带有L2正则化的线性回归——岭回归

alpha 正则化力度=惩罚项系数

      波士顿房价预测

from sklearn.datasets import load_boston
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
from sklearn.linear_model import LinearRegression, SGDRegressor, Ridge
from sklearn.metrics import mean_squared_error


def linear1():
    """
    正规方程的优化方法对波士顿房价进行预测
    :return:
    """
    # 1) 获取数据
    boston = load_boston()
    print("特征数量:\n",boston.data.shape)

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

    # 3) 标准化
    transfer = StandardScaler()
    x_train = transfer.fit_transform(x_train)
    x_test = transfer.transform(x_test)

    # 4) 预估器
    estimator = LinearRegression()
    estimator.fit(x_train,y_train)


    # 5) 得出模型
    print("正规方程-权重系数为:\n",estimator.coef_)
    print("正规方程-偏置为:\n",estimator.intercept_)

    # 6) 模型评估
    y_predict = estimator.predict(x_test)
    print("预测房价:\n",y_predict)
    error = mean_squared_error(y_test,y_predict)
    print("正规方程-均方误差为:\n",error)

    return None

def linear2():
    """
    梯度下降的优化方法对波士顿房价进行预测
    :return:
    """
    # 1) 获取数据
    boston = load_boston()
    print("特征数量:\n", boston.data.shape)

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

    # 3) 标准化
    transfer = StandardScaler()
    x_train = transfer.fit_transform(x_train)
    x_test = transfer.transform(x_test)

    # 4) 预估器
    estimator = SGDRegressor(learning_rate="constant",eta0=0.01,max_iter=10000,penalty="l1")
    estimator.fit(x_train, y_train)

    # 5) 得出模型
    print("梯度下降-权重系数为:\n", estimator.coef_)
    print("梯度下降 -偏置为:\n", estimator.intercept_)

    # 6) 模型评估
    y_predict = estimator.predict(x_test)
    print("预测房价:\n", y_predict)
    error = mean_squared_error(y_test, y_predict)
    print("梯度下降-均方误差为:\n", error)

    return None

def linear3():
    """
    岭回归对波士顿房价进行预测
    :return:
    """
    # 1) 获取数据
    boston = load_boston()
    print("特征数量:\n", boston.data.shape)

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

    # 3) 标准化
    transfer = StandardScaler()
    x_train = transfer.fit_transform(x_train)
    x_test = transfer.transform(x_test)

    # 4) 预估器
    estimator = Ridge(alpha=0.5,max_iter=10000)
    estimator.fit(x_train, y_train)

    # 5) 得出模型
    print("岭回归-权重系数为:\n", estimator.coef_)
    print("岭回归-偏置为:\n", estimator.intercept_)

    # 6) 模型评估
    y_predict = estimator.predict(x_test)
    print("预测房价:\n", y_predict)
    error = mean_squared_error(y_test, y_predict)
    print("岭回归-均方误差为:\n", error)

    return None


if __name__ == '__main__':
    # 代码1:正规方程的优化方法对波士顿房价进行预测
    linear1()
    # 代码2:梯度下降的优化方法对波士顿房价进行预测
    linear2()
    # 代码3:岭回归对波士顿房价进行预测
    linear3()

4.4 分类算法——逻辑回归与二分法

4.4.1 逻辑回归的应用场景

· 广告点击率  是否会被点击

· 是否为垃圾邮件

· 是否患病

· 是否为金融诈骗

· 是否为虚假账号

正例 /反例

4.4.2 逻辑回归的原理

1、输入

线性回归的输出就是逻辑回归的输入。

2、激活函数

· sigmoid函数  [0, 1]

        1/(1 + e^(-x))

假设函数 / 线性模型

        1/(1 + e^(-(w1x1 + w2x2 + w3x3 + ...... + wnxn + b)))

构建损失函数

       (y_predict - y_true)平方和/总数

          逻辑回归的真实值/预测值    是否属于某个类别

3、损失以及优化

1)损失

逻辑回归的损失,称之为对数似然损失,公式如下:

当真实值yi等于1,则后面式子没有了

优化损失

          梯度优化

4.4.3 逻辑回归API

4.4.4  案例:癌症分类预测-良/恶性乳腺癌肿瘤预测

恶性 - 正例

流程分析:

             1)获取数据

                       读取的时候加上names

             2) 数据处理

                       处理缺失值

             3)数据集划分

             4)特征工程:

                         无量纲化处理——标准化

             5)逻辑回归预估器

             6)模型评估

真的患癌症的,能够被检查出来的概率 ——召回率

4.4.5 分类的评估方法

1、精确率与召回率

1混淆矩阵

TP = True Possitive

FN = False Negative

2 精确率(Precision)与召回率(Recall)

精确率

召回率  查的全不全

工厂  质量检测  次品  召回率

3 F1-score 模型的稳健型

总共有100个人,如果99个样本癌症,1个样本非癌症

不管怎样我全都预测正例(默认癌症为正例)——  不负责任的模型

准确率:99%

召回率:99/99 = 100%

精选率:99%

F1-score:2*99%/  199% = 99.497%

AUC:0.5

        TPR = 100%

        FPR = 1 / 1 = 100%

3、 分类评估报告API

· sklearn.metrics.classification_report(y_true, y_pred, labels=[], target_names=None)

  • y_true:真实目标值
  • y_pred:估计器预测目标值
  • labels:指定类别对应的数字
  • target_names:目标类别名称
  • return:每个类别精确率与召回率

问题:如何衡量样本不均衡下的评估?

衡量样本不均衡下的评估:
2 ROC曲线与AUC指标

TPR就是召回率

4.5 模型保存和加载

4.5.1 sklearn模型的保存和加载API

· from sklearn.externals import joblib

在较新的scikit - learn版本中,joblib已经成为独立的库,正确的导入方式应该是直接import joblib,

不需要再从sklearn.externals里面导入啦。

  • 保存:joblib.dump(rf, ‘test.pkl’)
  • 加载:estimator = joblib.load(‘test.pkl’)

4.5.2 线性回归的模型保存加载案例

1、保存模式

2、加载模式

4.6 无监督学习——K-means算法

4.6.1 什么是无监督学习

没有目标值(无标签)—无监督学习

4.6.2 无监督学习包含算法

· 聚类

       K-means(K均值聚类)

· 降维

       PCA

4.6.3 K-means原理

4.6.4 K-meansAPI

 · sklearn.cluster.KMeans(n_cluster=8, init='k-means++')

  • k-means聚类
  • n_clusters:开始聚类中心数量
  • init:初始化方法,默认为‘k-means++’
  • labels_:默认标记的类型,可以和真实值比较(不是值比较)

4.6.5 案例:K-means对Instacart Market用户聚类

k = 3

流程分析:

降维之后的数据

1)预估器流程

2)看结果

3)模型评估

4.6.6 Kmeans性能评估指标

1、轮廓系数

2、轮廓系数值分析

b_i >> a_i 说明外部距离很大,内部距离很小

Sc \approx b_i / b_i = 1

b_i << a_i

Sc \approx -a_i / a_i = -1

3、结论

如果b_i >> a_i:趋近于1效果越好,

b_i << a_i:趋近于-1,效果不好。

轮廓系数的值是介于 [-1,1],

越趋近于1代表内聚度和分离度都相对较优。

4、轮廓系数API

· sklearn.metrics.silhouette_score(X, labels)

  • 计算所有样本的平均轮廓系数
  • X:特征值
  • labels:被聚类标记的目标值

5、用户聚类结果评估

4.6.7 K-means总结

应用场景:

         没有目标值

         分类

· 特点分析:采用迭代式算法,直观易懂并且非常实用
· 缺点:容易收敛到局部最优解(多次聚类)

注意:聚类一般坐在分类之前

# 学了快9天,机器学习感觉学的不怎么样,准备二刷多加复习,争取早日开深度学习。

更多推荐