栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

机器学习-DAY08

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

机器学习-DAY08

1.线性回归

线性关系模型:

 

因变量可理解为目标值

损失函数:即为误差大小,误差平方和(最小二乘法)

求解模型中的W可以缩小误差

 

梯度下降需要手动制定学习率

 

 

线性回归时算法对比:

 scikit-learn :优点:封装好,建立模型简单,预测简单

                        缺点:算法的过程,有些参数都在算法API内部优化

TensorFlow :封装高低都有,自己实现线性回归

2.使用sklearn实现波士顿房价预测

特征值

 

 注意:线性回归案例中数据需要进行标准化处理,避免因为某个特征数值过大对结果产生影响

from sklearn.metrics import mean_squared_error   # 线性回归性能评估

 

 官网建议:样本数量大于10万使用梯度下降SGDRegressor

                   样本数量小于10万使用正规方程LinearRegression

 

 

 3.过拟合和欠拟合

 

 线性回归:线性关系的数据(直线的关系)

                   非线性关系(曲线的关系)

模型复杂的原因:数据的特征和目标值的关系不仅仅是线性关系

欠拟合原因及解决方法:

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

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

过拟合原因及解决方法:

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

        解决方法:进行特征选择,消除关联性大的特征(很难做)

                          交叉验证(让所有数据都有过训练)

                          正则化(了解)

根据结果现象判断是过拟合还是欠拟合,交叉验证:训练集、测试集都不行是欠拟合;训练集很好,测试集不行是过拟合。

回归解决过拟合的方式:

        线性回归:LinearRegression容易出现过拟合,为了把训练集数据表现更好

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

带有正则化的线性回归-Ridge岭回归

 线性回归岭LinearRegression与Ridge回归对比:

        岭回归:回归得到的回归系数更符合实际,更可靠。另外,能让估计参数的波动范围变小,变的更稳定。在存在病态数据偏多的研究中有较大的实用价值。

 

# import matplotlib.pyplot as plt
#
# plt.figure(figsize=(10,10))
# plt.scatter([60,72,75,80,83], [126,151.2,157.5,168,174.3])
# plt.show()

from sklearn.datasets import load_boston  # 加载波士顿房价数据
from sklearn.linear_model import LinearRegression, SGDRegressor, Ridge   # 回归预测时使用的API:正规方程/梯度下降/岭回归
from sklearn.model_selection import train_test_split   # 数据分割
from sklearn.preprocessing import StandardScaler   # 标准化
from sklearn.metrics import mean_squared_error   # 线性回归性能评估
import numpy as np

def mylinear():
    """
    线性回归直接预测房子价格
    :return:
    """
    # 获取数据
    lb = load_boston()

    # 分隔数据集到训练集和测试集
    x_train, x_test, y_train, y_test = train_test_split(lb.data, lb.target, test_size=0.25)

    print(y_train, y_test)
    # 进行标准化处理
    # 特征值和目标值都进行标准化处理,目标值还需再转换回来,实例化两个标准化API
    std_x = StandardScaler()
    x_train = std_x.fit_transform(x_train.reshape(-1, 1))  # x_train.reshape(-1, 1) 把一维数据改成二维
    x_test = std_x.transform(x_test.reshape(-1, 1))

    std_y = StandardScaler()
    y_train = std_y.fit_transform(y_train.reshape(-1, 1))
    y_test = std_y.transform(y_test.reshape(-1, 1))

    print(x_train.shape)
    print(y_train.shape)

    # estimator预测
    # 正规方程求解方式预测结果
    lr = LinearRegression()
    lr.fit(x_train[0:379], y_train)   # 该处与视频不同,必须保持fit两个参数长度一致,这是数据量过少导致的
    print("lr权重参数:", lr.coef_)    # 打印权重参数

    # 预测测试集的房子价格
    y_lr_predict = std_y.inverse_transform(lr.predict(x_test))
    print("lr测试集中每个房子的预测价格:", y_lr_predict)
    print("正规方程的均方误差:", mean_squared_error(std_y.inverse_transform(y_test), y_lr_predict[0:127]))

    # 梯度下降进行房价预测
    sgd = SGDRegressor()
    sgd.fit(x_train[0:379], y_train)   # 该处与视频不同,必须保持fit两个参数长度一致
    print("sgd权重参数:", sgd.coef_)    # 打印权重参数

    # 预测测试集的房子价格
    y_sgd_predict = std_y.inverse_transform(sgd.predict(x_test))
    print("sgd测试集中每个房子的预测价格:", y_sgd_predict)
    print("梯度下降的均方误差:", mean_squared_error(std_y.inverse_transform(y_test), y_sgd_predict[0:127]))

    # 岭回归进行房价预测
    rd = Ridge(alpha=1.0)   #  alpha可以在0-1之间,或者1-10之间
    rd.fit(x_train[0:379], y_train)   # 该处与视频不同,必须保持fit两个参数长度一致
    print("Ridge权重参数:", rd.coef_)    # 打印权重参数
    # 预测测试集的房子价格
    y_rd_predict = std_y.inverse_transform(rd.predict(x_test))
    print("Ridge测试集中每个房子的预测价格:", y_rd_predict)
    print("岭回归的均方误差:", mean_squared_error(std_y.inverse_transform(y_test), y_rd_predict[0:127]))

    return None


if __name__ == "__main__":
    mylinear()

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/929646.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号