机器学习3

本文深入探讨了机器学习中的线性回归,包括计算和矩阵运算,优化策略如最小二乘法和梯度下降。还讨论了过拟合和欠拟合现象,提出正则化作为解决方案,特别介绍了岭回归。此外,简述了模型保存、逻辑回归、损失函数以及非监督学习中的聚类方法k-means。
摘要由CSDN通过智能技术生成

1. 线性回归的计算和矩阵计算

  1. 线性关系:
  2. 线性关系模型:
    在这里插入图片描述
  3. 以权重和特征去预测结果
  4. 矩阵必须是二维的

2. 线性回归策略优化

  1. 损失函数(最小二乘法):在这里插入图片描述
  2. 最小二乘法之梯度下降在这里插入图片描述
  3. 线性回归正规方程、梯度下降API:
    在这里插入图片描述
    其中梯度下降虽然需要参数,但是在这个API中可以不写(默认)
  4. 回归性能评估
    在这里插入图片描述
    均方误差的API:
    在这里插入图片描述
    在这里插入图片描述
  5. 实例:
    # 导入相关模块
    from sklearn.datasets import load_boston
    from sklearn.model_selection import train_test_split
    from sklearn.preprocessing import StandardScaler
    from sklearn.linear_model import SGDRegressor, LinearRegression
    from sklearn.metrics import mean_squared_error
    # 获取数据
    lb = load_boston()
    # 将数据集分为训练集和测试集
    x_train, x_test, y_train, y_test = train_test_split(lb.data, lb.target, test_size=0.25)
    # 数据的标准化处理(两次独立的标准化)
    std_x = StandardScaler()
    x_train = std_x.fit_transform(x_train)
    x_test = std_x.transform(x_test)
    std_y = StandardScaler()
    y_train = std_y.fit_transform(y_train.reshape(-1, 1))
    y_test = std_y.transform(y_test.reshape(-1, 1))
    def lreg():
        # 正规方程求解预测结果
        lr = LinearRegression()
        lr.fit(x_train, y_train)
        # 预测得到的直接结果是标准化之后的结果,要进行逆变换
        p_y_test = std_y.inverse_transform(lr.predict(x_test))
        print("线性回归正规方程权重矩阵为:", "\n", lr.coef_)
        print("线性回归正规方程预测测试集房价为:", "\n", p_y_test)
        return p_y_test
    def sgdreg():
        # 梯度下降求解预测结果
        sgd = SGDRegressor()
        sgd.fit(x_train, y_train)
        # 预测得到的直接结果是标准化之后的结果,要进行逆变换
    
        p_y_test = std_y.inverse_transform(sgd.predict(x_test))
        print("线性回归梯度下降权重矩阵为:", "\n", sgd.coef_)
        print("线性回归梯度下降预测测试集房价为:", "\n", p_y_test)
        return p_y_test
    
    sgd_y = sgdreg()
    line_y = lreg()
    # 使用梯度下降和正规方程返回的数据类型其实不是一致的
    print("两者的预测偏差:", "\n", sgd_y-line_y[0])
    mse_sgd = mean_squared_error(std_y.inverse_transform(y_test), sgd_y)
    mse_line = mean_squared_error(std_y.inverse_transform(y_test), line_y)
    print("正规方程的预测误差是:", "\n", mse_line)
    print("梯度下降的预测误差是:", "\n", mse_sgd)
    
  6. 算法选择
    在这里插入图片描述
  7. 对比
    在这里插入图片描述

3. 过拟合和欠拟合

  1. 图示:
    在这里插入图片描述
  2. 对线性模型进行训练学习会变成复杂模型,也就是模型变复杂的原因在于数据的特征值和目标值之间不只是线性关系。
  3. 对于欠拟合,可以采取增加特征数量的方法
  4. 对于过拟合:
    进行特征选择,消除关联性大的特征(很难做)
    交叉验证(让所有数据都有过训练)
    正则化(了解)
  5. 特征选择:
    过滤式:低方差
    嵌入式:决策树、正则化、神经网络
  6. 正则化解决过拟合-----L2正则化
    作用:可以使得W的每个元素都很小,都接近于0
    优点:越小的参数说明模型越简单,越简单的模型则越不
    容易产生过拟合现象

4. 带有正则化的线性回归—岭回归Ridge

  1. API
    在这里插入图片描述
    在这里插入图片描述
  2. 超参数正则化力度的分析
    在这里插入图片描述
    正则化力度取值,0~1或者1~10
  3. 线性回归和岭回归的对比:
    在这里插入图片描述

5. 模型的保存和提取

  1. API:
    在这里插入图片描述

6. 逻辑回归

  1. 线性回归的公式作为逻辑回归的输入,逻辑回归智能解决二分类问题,也能得出概率值。也会有线性回归的过拟合问题,但是在sklearn中的API引入了正则化。
  2. sigmoid函数:输出为一个概率值
    在这里插入图片描述
  3. 逻辑回归公式
    在这里插入图片描述
  4. 逻辑回归的损失函数(对数似然损失)
    在这里插入图片描述
  5. 逻辑回归的API:
    在这里插入图片描述
  6. 哪个类别比例少,一般选择该类别作为逻辑回归的判定类别。
  7. 实例演示:
    # 导入相关模块
    import pandas as pd
    import numpy as np
    from sklearn.preprocessing import StandardScaler
    from sklearn.linear_model import LogisticRegression
    from sklearn.model_selection import train_test_split
    from sklearn.metrics import classification_report
    
    
    # 获取数据,read_csv是万能接口
    col_name = ['Sample code number','Clump Thickness', 'Uniformity of Cell Size','Uniformity of Cell Shape','Marginal Adhesion',
                'Single Epithelial Cell Size','Bare Nuclei','Bland Chromatin','Normal Nucleoli','Mitoses','Class']
    # data = pd.read_csv("https://archive.ics.uci.edu/ml/machine-learning-databases/breast-cancer-wisconsin/breast-cancer-wisconsin.data",
    #                    names=col_name)
    data = pd.read_csv("breast-cancer-wisconsin.data",
                       names=col_name)
    print(data)
    # 数据预处理:处理缺失值(删除)、数据标准化
    # 缺失值是问号,要将其替换成numpy中的nan,数据.replace返回的是替换之后的数据
    data = data.replace(to_replace="?", value=np.nan)
    data = data.dropna()
    # 数据筛选(列表切片)
    data_x = data[col_name[1:10]]
    data_y = data[col_name[10]]
    # 数据标准化
    ssc = StandardScaler()
    data_x = ssc.fit_transform(data_x)
    # 测试集和训练集分割
    x_train, x_test, y_train, y_test= train_test_split(data_x, data_y)
    # 利用逻辑回归进行预测
    lr = LogisticRegression()
    lr.fit(x_train, y_train)
    p_test = lr.predict(x_test)
    # 使用相关参数进行模型的评估
    print("精确度和召回率分别是:\n", classification_report(y_test,p_test,labels=[2,4],target_names=["benign","malignant"]))
    

7. 损失函数

  1. 对数似然损失:存在局部最小的限制,也是梯度下降的方法的缺点,有以下两种减轻该限制的方法。
    1. 多次随机触发去找,最后再比较。
    2. 在求解得过程中调整学习率,
  2. 均分误差不存在局部最小的限制,最后可以求出最小的局部最小。

8. 分类回归总结

在这里插入图片描述

9. 非监督学习 - - - 聚类

  1. 聚类:k-means
  2. 对于不只到需要划分的类别个数,则类别个数就是一个超参数,一般聚类用在分类之前。
  3. 聚类步骤
    1、随机设置K个特征空间内的点作为初始的聚类中心
    2、对于其他每个点计算到K个中心的距离,未知的点选择最近的一个聚类
    中心点作为标记类别
    3、接着对着标记的聚类中心之后,重新计算出每个聚类的新中心点(平
    均值)
    4、如果计算得出的新中心点与原中心点一样,那么结束,否则重新进行
    第二步过程
  4. k-means聚类的API:
    在这里插入图片描述
  5. 聚类的性能评估指标在这里插入图片描述
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值