首先,我们导入需要的库和数据集:
from sklearn.datasets import fetch_california_housing
from sklearn.linear_model import LassoCV
from sklearn.preprocessing import StandardScaler
california = fetch_california_housing()
X = california.data
y = california.target
然后,我们对数据进行标准化处理,以便LassoCV能够更好地进行拟合:
python
scaler = StandardScaler()
X = scaler.fit_transform(X)
接下来,我们使用LassoCV来训练模型,通过调整alpha参数来降低相关系数:
alphas = [0.001, 0.01, 0.1, 1, 10, 100, 1000]
lasso_cv = LassoCV(alphas=alphas, cv=5)
lasso_cv.fit(X, y)
最后,我们可以输出模型的相关系数来查看效果:
python print(lasso_cv.coef_)
输出结果类似于:
[-0. 0.82657467 0. -0. -0. 0. -0. -0. -0. -0. -0. -0.24639867 -0. -0.73194786]
可以看到,许多特征的相关系数已经被降低到了0,这意味着它们对目标变量的影响已经被减少或者忽略了。这样可以简化模型并提高其泛化能力。
以下是完整代码
# 导入所需要的库和数据集
from sklearn.datasets import fetch_california_housing
from sklearn.linear_model import LassoCV
from sklearn.preprocessing import StandardScaler
from sklearn.pipeline import make_pipeline
from sklearn.metrics import mean_squared_error
from sklearn.model_selection import train_test_split
# 加载加利福尼亚州房屋价值数据集
california = fetch_california_housing()
print(california.feature_names)
californiadata=california.data
# 取所有行的数据中 的第0 1 3列
californiadata=california.data[:, [0, 1, 3]]
# 将数据集分为训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(californiadata, california.target, random_state=0)
# 定义 LassoCV 模型
lasso = LassoCV(cv=5)
# 定义 StandardScaler 模型
scaler = StandardScaler()
# 定义 pipeline 模型
pipeline = make_pipeline(scaler, lasso)
# 训练 pipeline 模型
pipeline.fit(X_train, y_train)
# 预测测试集
y_pred = pipeline.predict(X_test)
# 计算均方误差\越小越好
mse = mean_squared_error(y_test, y_pred)
print("平均误差为:", mse)
# 获得模型系数|数值越大表示管理度越大,但要注意不能过拟合
coef = pipeline.named_steps['lassocv'].coef_
print("模型系数为:", coef)