机器学习Housing数据集
import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt
from sklearn.datasets import fetch_openml
设置Seaborn的美观风格
sns.set(style=“whitegrid”)
Step 1: 下载 Housing 数据集,并读入计算机
def load_housing_data():
housing = fetch_openml(name=“house_prices”, as_frame=True)
housing_df = housing.data
# 打印实际列名和列数,方便调试
print("数据集的列数:", housing_df.shape[1])
print("数据集的列名:", housing_df.columns)
# 检查列数是否为 14,如果是则重命名列,否则跳过重命名步骤
if housing_df.shape[1] == 14:
housing_df.columns = [
"CRIM", "ZN", "INDUS", "CHAS", "NOX", "RM", "AGE", "DIS", "RAD", "TAX",
"PTRATIO", "B", "LSTAT", "MEDV"
]
else:
print("数据列数不符,未进行重命名。请检查数据集。")
return housing_df
读取数据
housing_df = load_housing_data()
print(“Housing 数据集的前 5 项数据:”)
print(housing_df.head())
Step 2: 定义特征
features = [
“CRIM”, “ZN”, “INDUS”, “CHAS”, “NOX”, “RM”, “AGE”, “DIS”, “RAD”, “TAX”,
“PTRATIO”, “B”, “LSTAT”, “MEDV”
]
print(f"\n定义的特征列为:{features}")
Step 3: 抽取五个特征:LSTAT、INDUS、NOX、RM、MEDV,绘制散点图矩阵
selected_features = [“LSTAT”, “INDUS”, “NOX”, “RM”, “MEDV”]
sns.pairplot(housing_df[selected_features], diag_kind=“kde”, markers=“o”)
plt.suptitle(“散点图矩阵(选取特征:LSTAT、INDUS、NOX、RM、MEDV)”, y=1.02)
plt.show()
Step 4: 选取其他五个特征绘制散点图矩阵
other_features = [“CRIM”, “AGE”, “DIS”, “RAD”, “TAX”]
sns.pairplot(housing_df[other_features], diag_kind=“kde”, markers=“o”)
plt.suptitle(“散点图矩阵(选取特征:CRIM、AGE、DIS、RAD、TAX)”, y=1.02)
plt.show()
Step 5: 计算相关系数矩阵,并绘制热力图
使用前面选定的五个特征加上自己选择的五个特征
all_selected_features = selected_features + other_features
correlation_matrix = housing_df[all_selected_features].corr()
绘制热力图
plt.figure(figsize=(10, 8))
sns.heatmap(correlation_matrix, annot=True, fmt=“.2f”, cmap=“coolwarm”, square=True, cbar_kws={‘shrink’: .8})
plt.title(“相关系数矩阵热力图”)
plt.show()
总结 Housing 数据集的变化情况
print(“\n总结:\n通过散点图矩阵和相关系数热力图,我们可以观察到不同特征之间的关系。例如:”)
print(“- 房间数量(RM)与房价中位数(MEDV)呈正相关关系,房间数量越多,房价越高。”)
print(“- 人均犯罪率(CRIM)与地位较低人口比例(LSTAT)呈正相关关系,可能表明犯罪率与经济状况存在关联。”)
print(“- NOX和DIS的负相关性较强,可能表示距离市中心越远的地区空气污染物浓度越低。”)
print(“- 其他特征的相关性也可以从热力图中进一步分析。”)