回归算法分析和非监督学习

本文详细介绍了回归算法,包括线性回归、岭回归及其在房价预测、销售预测等领域的应用。同时,讨论了线性回归的矩阵运算、损失函数、模型评估和正则化。此外,还探讨了非监督学习中的k-means聚类算法,解释了其工作原理和应用场景,并与逻辑回归进行了对比。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

机器学习算法

回归算法分析

  1. 分类和回归问题区别
    • 回归
      • 目标值连续
    • 分类
      • 离散型数据
  2. 回归应用
    • 房价预测
    • 销售额的预测
    • 贷款额度预测
  3. 线性回归
    • 寻找一种能够预测的趋势

    • 线性关系

      • 二维:直线关系
      • 三维:特征和目标值,在一个平面当中
    • 线性关系定义

      • 一个特征
        • y = kx +b
        • b : 偏置
          • 为了使对单个特征的情况更加通用
      • 多个特征
        • y = W1* X1 + W2*X2 + … + WaXa + b
          • W:权重
          • b: 偏置项
    • 线性回归定义:特征和目标值之间进行建模的回归分析

矩阵

  1. 矩阵: 大多数算法的计算基础

  2. 数组和矩阵的区别

    • 数组:
      • 可以是0维 1维 2维 3维 等
      • 数组运算
        • 加减乘除
    • 矩阵
      • 必须是2维的
      • 满足了一些的特定的运算需求
  3. 矩阵运算

    • 矩阵相乘
      • (m行,l列)*(l行,n列) = (m行,n列)
      • np.dot()
      In [2]: import numpy as np
      
      In [3]: a = [[1,2,3,4,],[2,3,7,9]]
      
      In [4]: b = [2,2,2,2]
      
      In [6]: np.multiply(a,b)  # 数组运算
      Out[6]:
      array([[ 2,  4,  6,  8],
             [ 4,  6, 14, 18]])
      
      In [7]: b = [[2],[2],[2],[2]]
      
      In [8]: np.dot(a,b)
      Out[8]:
      array([[20],
             [42]])
      

线性回归(迭代的算法)

  1. 回归

    • 知道误差,就去不断减少误差
  2. 迭代的过程

    • 算法
    • 策略(损失函数)
    • 优化
  3. 策略(损失函数)

    • 最小二乘法
    • 所有 的(预测值 - 实际值)^2 的和就是误差
    • 误差平方和
  4. 优化

    • 寻找最优的W值
    • 使得损失函数最小
    • 求W的方法
      • 正规方程
        • 数据复杂的时候很难求到
      • 梯度下降
        • 影响因素: 学习率
  5. API

    • 正规方程
      • sklearn.linear_model.LinearRegression
        • 回归系数(权重)
          • coef_
        • 普通最小二乘线性回归
    • 梯度下降
      • sklearn.linear_model.SGDRegressor
        • coef_
      • 通过使用SGD最小化线性模型
    • 容易出现过拟合
      • 使用正则化
        • 岭回归
  6. scikit-learn的优缺点

    • 优点
      • 封装好,建立模型简单,预测简单
    • 缺点
      • 算法的过程,有写参数都字啊算法API内部优化,参数难找
    • tensorflow:
      • 封装高低,自己实现线性回归,学习率什么的都可以自己指定,过程可以看到
  7. 线性回归需要做标准化处理

  8. 正规方程和梯度下降对比

    • 梯度下降
      1. 需要学习率
      2. 需要多次迭代
      3. 适用于特征量大的实例
      4. 适用于各种类型的模型
    • 正规方程
      1. 不需要学习率
      2. 一次运算得出结果
      3. 特征量少的时候用的多,一般特征小于10000时使用
      4. 一般只用在特征量少的线性模型
      5. 不能解决你和问题

回归性能评估

  1. 使用均方误差
  2. API
    • sklearn.metrics.mean_squared_error
      • 参数
        1. 测试数据预测的目标值
        2. 测试数据实际的目标值

过拟合和欠拟合

  1. 问题

    • 训练数据训练的很好,但是在测试数据中不是很好
  2. 过拟合

    • 学习的东西太多
    • 训练集比较好,测试集不好
    • 模型过于复杂
    • 原因
      • 原始特征过多,存在一些嘈杂特征,模型过于复杂是因为模型兼顾各个测试数据点
    • 解决办法
      • 特征选择,消除关联大的特征(比较难)
      • 交叉验证(让所有数据都有过训练) - 检验出
      • 正则化(了解)
        • 尽量减少高次项的权重
        • 岭回归-带有正则化
  3. 欠拟合

    • 学习的东西太少
    • 训练集和测试集数据误差都大
    • 模型过于简单
    • 原因
      • 学习数据的特征过少
    • 解决方法
      • 增加数据的特征数量
  4. 模型复杂的原因

    • 原因:
      • 数据的特征和目标值之间不仅仅是线性关系
  5. 判断方法

    • 看交叉验证训练集的结果和测试集的结果
    • 欠拟合
      • 训练集结果和测试集结果都不行
    • 过拟合
      • 训练集结果很好,测试集下降幅度大
  6. 回归解决过拟合

    • L2正则化: Ridge:岭回归,带有正则化的线性回归

岭回归

  1. 带有正则化的回归
    • 解决过拟合
  2. API
    • sklearn.linear_model.Ridge(alpha=1.0)
      • 参数
        1. alpha: 正则化力度(超参数)
          • 取值范围 0-1之间/1-10之间
        2. coef_: 回归系数
  3. 正则化力度对结果的影响
    • 力度越来越大,权重越来越小,模型越来越简单
  4. 优势
    • 回归更符合实际,更可靠
    • 在异常数据较多的时候使用岭回归
  5. alpha超参数可以使用网格搜索来进行对数据的优化

模型的保存和加载

  1. 将训练好的模型储存起来,再后在直接加载使用
  2. 模块
    • from sklearn.externals import joblib
      • 0.8版本
    • 最新版本中直接导入joblib使用
      • import joblib
    • 保存
      • joblib.dump(实例化的模型,“文件名.pkl”)
    • 加载
      • joblib.load(“文件名.pkl”)

回归算法实例

  1. 线性回归:正规方程、梯度下降、岭回归、模型保存和加载
    波士顿房价预测
    # coding=utf-8
    # 回归数据集  波士顿房价
    from sklearn.datasets import load_boston
    # 标准化处理
    from sklearn.preprocessing import StandardScaler
    # 线性回归  正规方程    梯度下降     岭回归
    from sklearn.linear_model import LinearRegression, SGDRegressor, Ridge
    # 数据分隔
    from sklearn.model_selection import train_test_split
    # 算法衡量 均方误差
    from sklearn.metrics import mean_squared_error
    # 导入保存模型
    import joblib
    
    
    def linear_regression(x_train, x_test, y_train, y_test, std_y):
        """
        正规方程
        :param x_train:
        :param x_test:
        :param y_train:
        :param y_test:
        :return:None
        """
        print("正规方程")
        # 实例化
        lr = LinearRegression()
        
        # 输入数据
        lr.fit(x_train, y_train)
        
        # 权重
        print("回归系数:")
        print(lr.coef_)
        
        # 预测  测试集的房子价格
        # 标准化转换成真实的房子的价格 inverse_transform
        y_predict = std_y.inverse_transform(lr.predict(x_test))
        
        print("测试集中的预测房价:\n", y_predict)
        
        print("均方误差:"
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值