# 机器学习线性回归——概念梳理及非线性拟合

1、 批量梯度下降

2、 随机梯度下降

3、 mini-batch

### 正则化策略

1、 岭回归：给目标函数添加L2正则化项，即在使目标函数最小化的同时，使回归系数的平方和最小

2、 Lasso回归：给目标函数添加L1正则化项

3、 ElasticNe回归：给目标函数添加L1正则化项和L2正则化项

### 案例：波士顿房价预测

import numpy as np
import matplotlib as mpl
import matplotlib.pyplot as plt
import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import PolynomialFeatures
from sklearn.linear_model import LinearRegression, RidgeCV, LassoCV, ElasticNetCV
from sklearn.pipeline import Pipeline
from sklearn.metrics import mean_squared_error

def not_empty(s):
return s != ''

if __name__ == "__main__":
# 加载数据并作前置处理
data = np.empty((len(file_data), 14))
for i, d in enumerate(file_data.values):
d = list(map(float, list(filter(not_empty, d[0].split(' ')))))
data[i] = d
x, y = np.split(data, (13,), axis=1)
y = y.ravel()
# 拆分训练数据和测试数据
x_train, x_test, y_train, y_test = train_test_split(x, y, train_size=0.7, random_state=0)
# 定义模型，二次特征+线性回归，其中线性回归分别采用无正则化/Ridge正则化/LASSO正则化/ElasticNet正则化
models = [Pipeline([('poly', PolynomialFeatures()), ('linear', LinearRegression(fit_intercept=False))]),
Pipeline([('poly', PolynomialFeatures()), ('linear', RidgeCV(fit_intercept=False))]),
Pipeline([('poly', PolynomialFeatures()), ('linear', LassoCV(fit_intercept=False))]),
Pipeline([('poly', PolynomialFeatures()),
('linear', ElasticNetCV(l1_ratio=[0.1, 0.3, 0.5, 0.7, 0.99, 1], fit_intercept=False))])]
# 模型标题
model_titles = ["二次特征+简单线性回归", "二次特征+岭回归", "二次特征+LASSO回归", "二次特征+ElasticNet回归"]
mpl.rcParams['font.sans-serif'] = ['simHei']
mpl.rcParams['axes.unicode_minus'] = False
# 绘图准备
plt.figure(figsize=(15, 10), facecolor='w')
# 遍历所有模型，分别利用不同的模型进行拟合
for i in range(len(models)):
plt.subplot(2, 2, i + 1)
# 当前模型
model = models[i]
print('开始建模: {}'.format(model_titles[i]))
# 训练模型
model.fit(x_train, y_train)
# 对测试数据目标值（房价）进行排序，方便显示
order = y_test.argsort(axis=0)
y_test = y_test[order]
x_test = x_test[order, :]
# 对测试数据进行预测
y_pred = model.predict(x_test)
# R2
r2 = model.score(x_test, y_test)
# 均方误差
mse = mean_squared_error(y_test, y_pred)
print('R2:', r2)
print('均方误差：', mse)
# 绘制子图
t = np.arange(len(y_pred))
plt.plot(t, y_test, 'r-', lw=2, label='真实值')
plt.plot(t, y_pred, 'g-', lw=2, label='估计值')
plt.legend(loc='upper left')
plt.grid(True)
plt.title(model_titles[i], fontsize=18)
plt.xlabel('样本编号', fontsize=15)
plt.ylabel('房屋价格', fontsize=15)

plt.tight_layout()
plt.show()
# plt.savefig('Boston.png', dpi=800)

|
13天前
|

39 3
|
29天前
|

【机器学习】线性回归：以房价预测为例
【机器学习】线性回归：以房价预测为例
89 1
|
1月前
|

【机器学习】深度探索：从基础概念到深度学习关键技术的全面解析——梯度下降、激活函数、正则化与批量归一化
【机器学习】深度探索：从基础概念到深度学习关键技术的全面解析——梯度下降、激活函数、正则化与批量归一化
29 3
|
1月前
|

19 2
|
15天前
|

AI算法：机器学习之线性回归
AI算法：机器学习之线性回归
43 0
|
29天前
|

【机器学习】基于扩散模型的文本到音频生成：突破数据局限，优化音频概念与实践顺序
【机器学习】基于扩散模型的文本到音频生成：突破数据局限，优化音频概念与实践顺序
107 0
|
1月前
|

【机器学习】深入探索机器学习：线性回归算法的原理与应用
【机器学习】深入探索机器学习：线性回归算法的原理与应用
49 0
|
1月前
|

【机器学习】机器学习基础概念与初步探索
【机器学习】机器学习基础概念与初步探索
27 0
|
1月前
|

188 0
|
1月前
|

【阿旭机器学习实战】【31】股票价格预测案例--线性回归
【阿旭机器学习实战】【31】股票价格预测案例--线性回归
21 0