Scikit-learn_回归算法_线性回归

一.概述

  • 若输出变量与一个或多个输入变量之间存在线性关系,则对此关系的研究称为线性回归
  • 特点
    • 只有一个变量的情况成为单变量回归,多于一个自变量的情况叫做多元回归
  • 线性模型子模块(linear_model)
    • LinearRegression最小二乘法回归模型
    • Ridge岭回归模型

二.用法和参数

  • sklearn.linear_model.LinearRegression()
    • LinearRegression.coef_:回归系数
    • LinearRegression.intercept_:截距

三.线性回归经常使用的两种优化算法

  • 正规方程
    • 不需要选择学习率
    • 一次运算得出
    • 需要计算方程,时间复杂度高O(n3)
  • 梯度下降法
    • 需要选择学习率
    • 需要迭代求解
    • 特征数量较大(超过10000个)可以使用

四.注意事项

  • 由于最小二乘法线性回归模型对特征项的相关性非常敏感,导致最小二乘法估计对随机误差非常敏感,可能会产生很大的方差。Ridge岭回归模型通过对系数的大小施加惩罚来避免最小二乘法线性回归模型对特征项相关性异常敏感的问题
  • Ridge岭回归模型的结果几乎不受样本特征的相关性影响
  • 最小二乘法线性回归模型结果的偏差比较大

五.使用场景

  • 根据场景
    • 房价预测
    • 销售额预测
    • 贷款额度预测
  • 小规模数据
    • 正规方程:LinearRegression
    • 岭回归:Ridge
  • 大规模数据
    • 梯度下降法:SGDRegressor

四.实例d

  • 最小二乘法线性回归模型

    	# 导入样本生成器
    	from sklearn.datasets import make_sparse_uncorrelated
    	# 导入最小二乘法线性回归模型
    	from sklearn.linear_model import LinearRegression
    	# 导入岭线性回归模型
    	from sklearn.linear_model import Ridge
    	# 导入拆分训练集的API
    	from sklearn.model_selection import train_test_split as tsplit
    `	from sklearn.metrics import mean_squared_error
    	# 导入复相关系数评估函数
    	from sklearn.metrics import r2_score
    	# 导入中位数绝对误差评估函数
    	from sklearn.metrics import median_absolute_error
    	import matplotlib.pyplot as plt
    	import numpy as np
    	# 生成有4个特征维的100个样本
    	X, y = make_sparse_uncorrelated(n_samples=100, n_features=4)
    	X_train, X_test, y_train, y_test = tsplit(X, y, test_size=0.1)
    	# 实例化最小二乘法线性回归模型
    	reg = LinearRegression()
    	# 训练模型
    	reg.fit(X_train, y_train)
    	# 预测
    	y_pred = reg.predict(X_test)
    	# 预测结果
    	y_pred
    	# 实际结果
    	y_test
    	# 均方误差
    	mean_squared_error(y_test, y_pred)
    	# 复相关系数
    	r2_score(y_test, y_pred)
    	# 中位数绝对误差
    	median_absolute_error(y_test, y_pred)
    	plt.rcParams['font.sans-serif'] = ['FangSong']
    	plt.rcParams['axes.unicode_minus'] = False
    	plt.subplot(121)
    	plt.title('残差图')
    	plt.plot(y_pred - y_test, 'o')
    	plt.plot(np.array([0, 9]), np.array([0, 0]))
    	plt.xlabel('测试样本序号')
    	plt.ylabel('残差:预测值-实际值')
    	plt.subplot(122)
    	plt.title('实际值-预测值')
    	plt.plot(y_test, y_pred, 'o')
    	y_range = np.linspace(y_test.min(), y_test.max(), 100)
    	plt.plot(y_range, y_range)
    	plt.xlabel('实际值')
    	plt.ylabel('预测值')
    	plt.show()
    	```
    
  • 岭回归模型

    from sklearn import linear_model
    # 样本特征相关性强
    X = np.array([[0, 0], [0, 0], [1, 1]])
    y = np.array([0, .1, 1])
    # 实例化最小二乘法线性回归模型
    reg_linear = linear_model.LinearRegression()
    # 实例化岭回归模型
    reg_ridge = linear_model.Ridge(alpha=0.5)
    # 训练
    reg_linear.fit(X, y)
    reg_ridge.fit(X, y)
    # 受样本的特征强相关性影响,回归结果明显异常
    reg_linear.coef_
    reg_linear.intercept_
    # alpha参数很好的控制了系数的收缩量
    reg_ridge.coef_
    reg_ridge.intercept_
    
  • 正规方程

    from sklearn.datasets import load_boston
    from sklearn.model_selection import train_test_split
    from sklearn.preprocessing import StandardScaler
    from sklearn.metrics import mean_squared_error
    from sklearn.linear_model import SGDRegressor
    from sklearn.linear_model import LinearRegression
    # 获取数据
    data = load_boston()
    # 数据集划分
    x_train, x_test, y_train, y_test = train_test_split(data.data, data.target, random_state=22)
    # 特征工程
    transfer = StandardScaler()
    x_train = transfer.fit_transform(x_train)
    x_test = transfer.transform(x_test)
    # 机器学习
    estimator = LinearRegression()
    estimator.fit(x_train, y_train)
    # 模型评估
    y_predict = estimator.predict(x_test)
    y_predict
    estimator.coef_
    estimator.intercept_
    # 均方误差
    mean_squared_error(y_test, y_predict)
    
  • 梯度下降法

    from sklearn.datasets import load_boston
    from sklearn.model_selection import train_test_split
    from sklearn.preprocessing import StandardScaler
    from sklearn.metrics import mean_squared_error
    from sklearn.linear_model import SGDRegressor
    from sklearn.linear_model import LinearRegression
    # 获取数据
    data = load_boston()
    # 数据集划分
    x_train, x_test, y_train, y_test = train_test_split(data.data, data.target, random_state=22)
    # 特征工程
    transfer = StandardScaler()
    x_train = transfer.fit_transform(x_train)
    x_test = transfer.transform(x_test)
    # 机器学习
    estimator = SGDRegressor(max_iter=1000)
    estimator.fit(x_train, y_train)
    # 模型评估
    y_predict = estimator.predict(x_test)
    y_predict
    estimator.coef_
    estimator.intercept_
    mean_squared_error(y_test, y_predict)
    
  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值