根据报错信息,`x`和`y`的第一维度不同。经过检查,发现在计算`mse_mean`时,使用了错误的轴,导致`mse_mean`是一个形状为`(1,)`的数组,而`alphas`是一个形状为`(100,)`的数组,因此在画图时出现了维度不匹配的错误。
修改代码如下:
```python
import numpy as np
import pandas as pd
from sklearn.linear_model import LassoCV
import matplotlib.pyplot as plt
# 读取数据
data = pd.read_csv('data.csv')
X = data.iloc[:, :-1].values
y = data.iloc[:, -1].values
# 自适应Lasso模型
alphas, coefs, mse = LassoCV(cv=10, random_state=0, max_iter=10000).path(X, y, eps=0.001)
# 输出最优lambda值
alpha_opt = alphas[np.argmin(np.mean(mse, axis=1))]
print("Optimal lambda:", alpha_opt)
# 提取最优lambda值对应的系数
lasso = LassoCV(cv=10, random_state=0, max_iter=10000, eps=0.001, alphas=[alpha_opt])
lasso.fit(X, y)
coef = lasso.coef_
# 特征筛选后的系数可视化
plt.figure(figsize=(10, 6))
for i in range(coefs.shape[0]):
plt.plot(alphas, coefs[i], label='Feature {}'.format(i+1))
plt.xscale('log')
plt.xlabel('Log(alpha)')
plt.ylabel('Coefficients')
plt.title('Lasso Paths')
plt.legend(loc='best')
plt.show()
# lambda与RMSE关系曲线图
mse_mean = np.mean(mse, axis=0) # 修改此处,使用axis=0计算均值
plt.figure(figsize=(10, 6))
plt.plot(alphas, mse_mean, label='Mean Squared Error')
plt.axvline(alpha_opt, linestyle='--', color='r', label='Optimal Lambda')
plt.xscale('log')
plt.xlabel('Log(alpha)')
plt.ylabel('Mean