LinearRegression()和Ridge之间的差异(alpha=0)

2024-10-03 06:26:00 发布

您现在位置:Python中文网/ 问答频道 /正文

当α参数接近零时,Tikhonov(岭)代价与最小二乘代价等价。scikit-learn docs about the subject上的所有内容都表示相同。所以我期待

sklearn.linear_model.Ridge(alpha=1e-100).fit(data, target)

相当于

^{pr2}$

但事实并非如此。为什么?在

更新代码:

import pandas as pd
from sklearn.linear_model import Ridge, LinearRegression
from sklearn.preprocessing import PolynomialFeatures
import matplotlib.pyplot as plt
%matplotlib inline

dataset = pd.read_csv('house_price_data.csv')

X = dataset['sqft_living'].reshape(-1, 1)
Y = dataset['price'].reshape(-1, 1)

polyX = PolynomialFeatures(degree=15).fit_transform(X)

model1 = LinearRegression().fit(polyX, Y)
model2 = Ridge(alpha=1e-100).fit(polyX, Y)

plt.plot(X, Y,'.',
         X, model1.predict(polyX),'g-',
         X, model2.predict(polyX),'r-')

注意:对于alpha=1e-8alpha=1e-100,绘图看起来是一样的

enter image description here


Tags: fromimportalphadatamodelassklearndataset
1条回答
网友
1楼 · 发布于 2024-10-03 06:26:00

根据documentationalpha必须是正浮点数。您的示例将alpha=0作为整数。使用一个小的正alphaRidge和{}的结果似乎收敛。在

from sklearn.linear_model import Ridge, LinearRegression
data = [[0, 0], [1, 1], [2, 2]]
target = [0, 1, 2]

ridge_model = Ridge(alpha=1e-8).fit(data, target)
print("RIDGE COEFS: " + str(ridge_model.coef_))
ols = LinearRegression().fit(data,target)
print("OLS COEFS: " + str(ols.coef_))

# RIDGE COEFS: [ 0.49999999  0.50000001]
# OLS COEFS: [ 0.5  0.5]
#
# VS. with alpha=0:
# RIDGE COEFS: [  1.57009246e-16   1.00000000e+00]
# OLS COEFS: [ 0.5  0.5]

更新 上面的alpha=0int的问题,似乎只是上面例子中的几个玩具问题的问题。在

对于住房数据来说,问题是规模问题。调用的15次多项式导致数值溢出。要从LinearRegressionRidge生成相同的结果,请先尝试缩放数据:

^{pr2}$

相关问题 更多 >