回归模型是机器学习中用于预测连续数值(实数)的模型,通常用于解决回归问题。两种常见的回归模型求解方法是正规方程和梯度下降。
正规方程是一种封闭解法,用于直接计算线性回归模型的权重(系数)。
原理:
给定一个线性回归模型的数据集,我们的目标是找到最佳的权重(系数)w,使得模型的预测值尽可能接近实际值。正规方程的原理是通过最小化损失函数来找到最佳权重。对于线性回归问题,损失函数通常是均方误差(Mean Squared Error):
J ( w ) = 1 2 m ∑ i = 1 m ( h w ( x ( i ) ) − y ( i ) ) 2 J(w) = \frac{1}{2m} \sum_{i=1}^{m} (h_w(x^{(i)}) - y^{(i)})^2 J(w)=2m1i=1∑m(hw(x(i))−y(i))2
其中,m 是训练样本数量,
h w ( x ( i ) ) h_w(x^{(i)}) hw(x(i))
是模型的预测值,
y ( i ) y^{(i)} y(i)
是实际值。
正规方程的目标是找到权重w,使损失函数J(w)最小化。通过求解损失函数的梯度等于零的方程,可以得到权重w的解析解:
∇ J ( w ) = 0 \nabla J(w) = 0 ∇J(w)=0
这个方程的解即为最佳权重w,从而得到线性回归模型。
优点:
缺点:
梯度下降是一种迭代优化算法,用于调整模型的参数,使损失函数最小化。
原理:
梯度下降的核心思想是通过迭代来更新模型参数,使损失函数逐渐减小。对于线性回归,梯度下降的损失函数是均方误差(Mean Squared Error),目标是最小化这个损失函数。
梯度下降的迭代过程如下:
梯度下降的关键是学习率α的选择,过大的学习率可能导致算法不收敛,过小的学习率可能导致收敛速度慢。
优点:
缺点:
sklearn.linear_model.LinearRegression(fit_intercept=True)
sklearn.linear_model.SGDRegressor(loss=“squared_loss”,fit_intercept=True,learning_rate=“invscaling”,eta0=0.01)
流程:
from sklearn.datasets import load_boston
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
from sklearn.linear_model import LinearRegression
def linear_demo():
"""
正规方程的方法对波士顿房价进行预测
:return:
"""
# 1. 获取数据
boston = load_boston()
# 2. 划分数据集
x_train, x_test, y_train,y_test = train_test_split(boston.data, boston.target, random_state= 22)
# 3. 标准化
transfer = StandardScaler()
x_train = transfer.fit_transform(x_train)
x_test = transfer.transform(x_test)
# 4. 预估器
estimator = LinearRegression()
estimator.fit(x_train, y_train)
# 5. 得出模型
print("权重系数为:\n", estimator.coef_)
print("偏置为:\n", estimator.intercept_)
# 6. 模型评估
y_predict = estimator.predict(x_test)
print("y_predict:\n", y_predict)
print("直接对比真实值和预测值:\n", y_test == y_predict)
score = estimator.score(x_test, y_test)
print("准确率为:\n", score)
from sklearn.datasets import load_boston
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
from sklearn.linear_model import SGDRegressor
def linear_demo():
"""
梯度下降的方法对波士顿房价进行预测
:return:
"""
# 1. 获取数据
boston = load_boston()
# 2. 划分数据集
x_train, x_test, y_train,y_test = train_test_split(boston.data, boston.target, random_state= 22)
# 3. 标准化
transfer = StandardScaler()
x_train = transfer.fit_transform(x_train)
x_test = transfer.transform(x_test)
# 4. 预估器
estimator = SGDRegressor()
estimator.fit(x_train, y_train)
# 5. 得出模型
print("权重系数为:\n", estimator.coef_)
print("偏置为:\n", estimator.intercept_)
# 6. 模型评估
y_predict = estimator.predict(x_test)
print("y_predict:\n", y_predict)
print("直接对比真实值和预测值:\n", y_test == y_predict)
score = estimator.score(x_test, y_test)
print("准确率为:\n", score)