机器学习#线性回归,岭回归

回归算法

线性回归

寻找一种能预测的趋势
二维:直线关系
三维:特征目标值,平面中

线性关系模型

一个通过***属性的线性组合 ***来进行预测的函数:
f(x)=w1x1+w2x2+w3x3+w4x4…+wnxn
w为权重,b为偏移量

回归,神经网络,全部称为迭代算法
预测的时候有差距,
回归:知道自己有误差

那门问题来了:我们如何去求解模型中的w使得误差值最小呢?
目的:是找到最小损失对应的W值
损失函数:寻找最优化的w

最小二乘法----梯度下降法
from sklearn.datasets import load_boston
from sklearn.linear_model import SGDRegressor, LinearRegression
from sklearn.model_selection import  train_test_split
from sklearn.preprocessing import StandardScaler


def mylinear():
    """
    线性回归直接预测房价

    """
    # 获取数据集
    lb = load_boston()

    # 分割数据集,测试
    x_train, x_test,  y_train, y_test = train_test_split(lb.data, lb.target, test_size=0.25)
    # print(y_test,y_train)
    # 进行标准化(?)目标值要不要标准化处理
    # 特征值,目标值都都要标准化,实例2个标准化API
    std_x = StandardScaler()

    x_train=std_x.fit_transform(x_train)
    x_test=std_x.transform(x_test)

    # 目标值
    std_y = StandardScaler()
    # 要求数组必须2维
    y_train=std_y.fit_transform(y_train.reshape(-1, 1))
    y_test= std_y.transform(y_test.reshape(-1, 1))

    # 正规方程求解预测
    # lr = LinearRegression()
    #
    # lr.fit(x_train,y_train)
    # print(lr.coef_)
    # # 预测测试集房子的价格
    # y_pred = lr.predict(x_test)
    # print("预测出来的房屋讲个:",y_pred)

    # 梯度下降
    sgd = SGDRegressor()

    sgd.fit(x_train, y_train)
    print(sgd.coef_)
    # 预测测试集房子的价格
    y_pred = sgd.predict(x_test)
    print("预测出来的房屋讲个:", y_pred)

    return None


if __name__ == "__main__":
    mylinear()

回归性能评估

mean_absolute_error(y_true,y_pred)
print('梯度下降的均方误差:', mean_absolute_error(std_y.inverse_transform(y_test), std_y.inverse_transform(y_pred)))
------------------------------
1.y_true 为真实值
2.y_pred 测试值
真实值,测试值均为标准化之前的值

梯度下降和正规方程比较

梯度下降 正规方程
需要选择学习效率a 不需要
需要多次迭代 一次运算出结果
特征数量N大时,也比较好用 如果特征数量N太大不太好用
使用与各种类型的模板 只适用于线性模型,不符合逻辑回归模型

过拟合,欠拟合

1.过拟合—学的太多了,模型过于复杂

  • 原因:原始特征过多,存在嘈杂特征
  • 决绝办法:1.进行特征选择,消除关联性大的,2.交叉验证,3正则式

2.欠拟合—学太少了,模型过于简单

  • 原因:学习到数据特征过少
  • 解决办法:增加数据的特征数量

经验:根据结果现象,判断是过拟合,还是欠拟合

L2正则化–Ridge领回归 带有正则化的回归

作用:可使得w的每个元素都很小,都接近于0
优点:越小的参数,说明模型越简单越简单的参数不容易过拟合

岭回归—rideg

sklearn.linear_model. Ridge

  • alpha: 正则化力度
  • cof_:回归系数

正则化力度越大,模型越来越简单,w

# 岭回归去进行房价预测
    rd = Ridge(alpha=1.0)

    rd.fit(x_train, y_train)
    print(rd.coef_)
    # 预测测试集房子的价格
    y_rd_pred = sgd.predict(x_test)
    print("预测出来的房屋讲个:", y_rd_pred)
    print('梯度下降的均方误差:', mean_absolute_error(std_y.inverse_transform(y_test), std_y.inverse_transform(y_rd_pred)))

发布了39 篇原创文章 · 获赞 1 · 访问量 384

猜你喜欢

转载自blog.csdn.net/qq_39441111/article/details/104911411