对于波士顿房价数据集 1. 加载或调用数据集 2. 检查数据是否有缺失及缺失值处理 3. 离群值检测及处理 4. 描述性统计分析 5. 绘图展示数据分布,对各个变量进行可视化 6. 使用随机森林进行变量选择 7. 对变量选择的变量建立各种回归模型进行预测研究,体现预测度量指标结果。 8. 与其他模型进行比较评估与实验结果分析,通过柱形图或者拟合曲线对实验结果进行可视化。Python代码
时间: 2024-03-24 12:41:48 浏览: 76
好的,我会按照您的要求回答问题,并展示相应的Python代码。
1. 加载或调用数据集
使用sklearn库自带的波士顿房价数据集进行分析。
```python
from sklearn.datasets import load_boston
boston = load_boston()
X = boston.data # 特征数据
y = boston.target # 目标数据
```
2. 检查数据是否有缺失及缺失值处理
检查数据中是否存在缺失值,若有则进行处理。
```python
import pandas as pd
df = pd.DataFrame(X, columns=boston.feature_names)
df.isnull().sum() # 检查是否有缺失值
```
3. 离群值检测及处理
使用Z-score或IQR方法检测离群值,并进行处理。
```python
from scipy import stats
import numpy as np
z = np.abs(stats.zscore(df))
df = df[(z < 3).all(axis=1)] # Z-score方法
Q1 = df.quantile(0.25)
Q3 = df.quantile(0.75)
IQR = Q3 - Q1
df = df[~((df < (Q1 - 1.5 * IQR)) | (df > (Q3 + 1.5 * IQR))).any(axis=1)] # IQR方法
```
4. 描述性统计分析
使用describe()方法得到数据集的描述性统计信息。
```python
df.describe()
```
5. 绘图展示数据分布,对各个变量进行可视化
使用seaborn库对数据集进行可视化。
```python
import seaborn as sns
import matplotlib.pyplot as plt
sns.pairplot(df)
plt.show()
```
6. 使用随机森林进行变量选择
使用随机森林对变量进行选择,并输出特征重要性。
```python
from sklearn.ensemble import RandomForestRegressor
rf = RandomForestRegressor(n_estimators=100, random_state=42)
rf.fit(X, y)
features = boston.feature_names
importances = rf.feature_importances_
indices = np.argsort(importances)[::-1]
for f in range(X.shape[1]):
print("%d. feature %d (%f)" % (f + 1, indices[f], importances[indices[f]]))
```
7. 对变量选择的变量建立各种回归模型进行预测研究,体现预测度量指标结果。
使用线性回归、岭回归、Lasso回归和ElasticNet回归进行预测,并输出预测度量指标结果。
```python
from sklearn.model_selection import cross_val_score
from sklearn.linear_model import LinearRegression, RidgeCV, LassoCV, ElasticNetCV
X = df.values
y = boston.target[df.index]
lr = LinearRegression()
lr_scores = cross_val_score(lr, X, y, cv=5, scoring='neg_mean_squared_error')
print("Linear Regression RMSE: %0.2f (+/- %0.2f)" % (np.sqrt(-lr_scores).mean(), np.sqrt(-lr_scores).std() * 2))
ridge = RidgeCV(alphas=[1e-3, 1e-2, 1e-1, 1]).fit(X, y)
ridge_scores = cross_val_score(ridge, X, y, cv=5, scoring='neg_mean_squared_error')
print("Ridge Regression RMSE: %0.2f (+/- %0.2f)" % (np.sqrt(-ridge_scores).mean(), np.sqrt(-ridge_scores).std() * 2))
lasso = LassoCV(alphas=[1e-3, 1e-2, 1e-1, 1]).fit(X, y)
lasso_scores = cross_val_score(lasso, X, y, cv=5, scoring='neg_mean_squared_error')
print("Lasso Regression RMSE: %0.2f (+/- %0.2f)" % (np.sqrt(-lasso_scores).mean(), np.sqrt(-lasso_scores).std() * 2))
elastic = ElasticNetCV(alphas=[1e-3, 1e-2, 1e-1, 1]).fit(X, y)
elastic_scores = cross_val_score(elastic, X, y, cv=5, scoring='neg_mean_squared_error')
print("ElasticNet Regression RMSE: %0.2f (+/- %0.2f)" % (np.sqrt(-elastic_scores).mean(), np.sqrt(-elastic_scores).std() * 2))
```
8. 与其他模型进行比较评估与实验结果分析,通过柱形图或者拟合曲线对实验结果进行可视化。
使用Barplot方法可视化各个模型的RMSE结果。
```python
models = ['Linear Regression', 'Ridge Regression', 'Lasso Regression', 'ElasticNet Regression']
scores = [np.sqrt(-lr_scores).mean(), np.sqrt(-ridge_scores).mean(), np.sqrt(-lasso_scores).mean(), np.sqrt(-elastic_scores).mean()]
sns.barplot(x=models, y=scores)
plt.ylabel('RMSE')
plt.show()
```
阅读全文