模型优化、降低相关性系数

439 阅读1分钟

首先,我们导入需要的库和数据集:

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)