from sklearn.linear_model import LinearRegression model=LinearRegression() import matplotlib.pyplot as plt import numpy as np from sklearn.linear_model import LinearRegression from sklearn.preprocessing import StandardScaler x=np.arange(10) y=2*x+1 plt.plot(x,y,'o') plt.show() X=x[:,np.newaxis] #Sklearn 里模型要求特征 X 是个两维变量么 (样本数×特征数),但在本例中 X 是一维,因为我们用 np.newaxis 加一个维度,就是把一维 [1, 2, 3] 转成 [[1],[2],[3]] scaler = StandardScaler() X_scaled = scaler.fit_transform(X) model.fit(X_scaled, y) print(model.coef_) print(model.intercept_)这里打印的值应该是2和1(斜率和截距)但是并不是这两个值,问题出在哪里?
时间: 2024-04-11 10:28:41 浏览: 96
Matplotlib.pyplot 三维绘图的实现示例
根据您提供的代码,问题出在数据的标准化上。您在使用 `StandardScaler` 对特征 `X` 进行标准化之后,应该将标准化后的数据 `X_scaled` 用于训练模型,而不是原始的特征 `X`。
以下是修正后的代码:
```python
from sklearn.linear_model import LinearRegression
import matplotlib.pyplot as plt
import numpy as np
from sklearn.preprocessing import StandardScaler
x = np.arange(10)
y = 2 * x + 1
plt.plot(x, y, 'o')
plt.show()
X = x[:, np.newaxis] # 将 X 转换为二维数组
scaler = StandardScaler()
X_scaled = scaler.fit_transform(X)
model = LinearRegression()
model.fit(X_scaled, y)
print(model.coef_) # 打印斜率
print(model.intercept_) # 打印截距
```
在修正后的代码中,我们先进行特征 `X` 的标准化,然后使用标准化后的特征 `X_scaled` 来训练线性回归模型。这样就可以得到正确的斜率和截距值。
希望这能帮助到您!如果您有任何其他问题,请随时提问。
阅读全文