Python 语言 用 Scikit learn 进行房价预测 随机森林模型调参 + 特征重要性分析

Python阿木 发布于 23 小时前 3 次阅读


Python房价预测:使用Scikit-learn的随机森林模型调参与特征重要性分析

房价预测是机器学习领域中的一个经典问题,它对于房地产市场分析、投资决策以及政策制定具有重要意义。我们将使用Python和Scikit-learn库来构建一个房价预测模型,并利用随机森林算法进行调参和特征重要性分析。

环境准备

在开始之前,请确保您已经安装了以下Python库:

- Scikit-learn
- Pandas
- NumPy
- Matplotlib

您可以使用以下命令安装这些库:

bash
pip install scikit-learn pandas numpy matplotlib

数据集介绍

我们将使用Kaggle上的波士顿房价数据集,该数据集包含了13个特征和房价标签。以下是数据集的一些基本信息:

- 特征:CRIM(犯罪率)、ZN(Zone urbanization)、INDUS(非零售商业用地比例)、CHAS(靠近查尔斯河的虚拟变量)、NOX(一氧化氮浓度)、RM(平均房间数)、AGE(建筑年龄)、DIS(到就业中心的距离)、RAD(辐射变量)、TAX(税率)、PTRATIO(教师与学生比例)、B(1000(Bk - 0.63)^2)和LSTAT(低收入家庭比例)
- 标签:MEDV(房价中位数)

数据预处理

在开始建模之前,我们需要对数据进行预处理,包括数据清洗、缺失值处理、特征编码和标准化。

python
import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler

加载数据集
data = pd.read_csv('boston.csv')

查看数据集的基本信息
print(data.info())

查看数据集中的缺失值
print(data.isnull().sum())

划分特征和标签
X = data.drop('MEDV', axis=1)
y = data['MEDV']

划分训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

特征标准化
scaler = StandardScaler()
X_train_scaled = scaler.fit_transform(X_train)
X_test_scaled = scaler.transform(X_test)

随机森林模型

随机森林是一种集成学习方法,它通过构建多个决策树并合并它们的预测结果来提高模型的泛化能力。下面是使用Scikit-learn构建随机森林模型的代码:

python
from sklearn.ensemble import RandomForestRegressor

创建随机森林模型
rf = RandomForestRegressor(n_estimators=100, random_state=42)

训练模型
rf.fit(X_train_scaled, y_train)

预测测试集
y_pred = rf.predict(X_test_scaled)

模型调参

为了提高模型的性能,我们可以使用网格搜索(GridSearchCV)来寻找最佳的模型参数。以下是对随机森林模型进行调参的代码:

python
from sklearn.model_selection import GridSearchCV

定义参数网格
param_grid = {
'n_estimators': [100, 200, 300],
'max_depth': [None, 10, 20, 30],
'min_samples_split': [2, 5, 10],
'min_samples_leaf': [1, 2, 4]
}

创建网格搜索对象
grid_search = GridSearchCV(estimator=rf, param_grid=param_grid, cv=5, n_jobs=-1, verbose=2)

执行网格搜索
grid_search.fit(X_train_scaled, y_train)

输出最佳参数
print("Best parameters:", grid_search.best_params_)

特征重要性分析

随机森林模型提供了一个方便的方法来评估特征的重要性。以下是对特征重要性进行分析的代码:

python
import matplotlib.pyplot as plt

获取特征重要性
feature_importances = grid_search.best_estimator_.feature_importances_

将特征重要性与特征名称对应
feature_names = X.columns
sorted_idx = feature_importances.argsort()

绘制特征重要性图
plt.figure(figsize=(12, 8))
plt.barh(range(len(feature_names)), feature_importances[sorted_idx], align='center')
plt.yticks(range(len(feature_names)), feature_names[sorted_idx])
plt.xlabel("Feature Importance")
plt.title("Feature Importance")
plt.show()

结论

我们使用Python和Scikit-learn库构建了一个房价预测模型,并利用随机森林算法进行了调参和特征重要性分析。通过网格搜索,我们找到了最佳的模型参数,并通过特征重要性图分析了各个特征对预测结果的影响。

请注意,本文中的代码仅为示例,实际应用中可能需要根据具体情况进行调整。对于更复杂的模型和更大的数据集,可能需要使用更高级的技术和工具。