一、數據集介紹
波士頓房價數據集是一個經典的回歸問題數據集,包含了1970年代末期波士頓的南部郊區共506個房屋樣本。這些數據都是在20世紀70年代末期以舊金山海灣區房價的情況為基準,採集了波士頓房價相關的特徵。這些特徵包括了房屋所在城市的犯罪率、每個城鎮平均房間數以及自有住房比例等。每個特徵的值都已經經過了預處理,例如處理了缺失值和異常值。
該數據集已經成為了機器學習、統計學和數據挖掘領域的經典數據集,被廣泛用於回歸問題和特徵選擇問題的研究。
二、數據集特徵
波士頓房價數據集共有13個要素特徵,分別是:
CRIM:城鎮人均犯罪率
ZN:佔地面積超過25000平方英尺的住宅用地比例
INDUS:城鎮非零售商業用地比例
CHAS:是否靠近Charles River的虛擬變量(如果靠近為1,否則為0)
NOX:一氧化氮濃度(每千萬份)
RM:每個住房的平均房間數
AGE:1940年以前自有住房的比例
DIS:距離5個波士頓就業中心的成塊加權距離
RAD:輻射性公路的可達性指數
TAX:每10,000美元的全額財產稅率
PTRATIO:城鎮師生比例
B:黑人比例(以1000為單位)
LSTAT:地位較低人群的比例
其中,前12個特徵都是數值型特徵,而第13個特徵是一個百分比。這些特徵是用於預測每個房屋的房價。
三、探索性數據分析
1. 單獨特徵與標籤的關係探討
為了更好地理解特徵和標籤之間的關係,我們可以通過繪製特徵和標籤的圖像來進行探究。
# 導入數據集
from sklearn.datasets import load_boston
boston_dataset = load_boston()
# 轉換數據為pandas DataFrame
import pandas as pd
boston = pd.DataFrame(boston_dataset.data, columns=boston_dataset.feature_names)
boston['MEDV'] = boston_dataset.target
# 繪製每個特徵與標籤之間的散點圖
import matplotlib.pyplot as plt
fig, axes = plt.subplots(nrows=4, ncols=4, figsize=(15,10))
for col,ax in zip(boston.columns,axes.flat):
ax.scatter(boston[col],boston['MEDV'])
ax.set_title(col)
plt.tight_layout()
plt.show()
通過觀察每個子圖的判定係數(R²值),我們可以初步了解到每個特徵與標籤之間的關係。例如,我們可以發現與房價最相關的特徵是房間數量(RM),而與房價最不相關的特徵是犯罪率(CRIM)。
2. 特徵之間的關係探討
除了單獨特徵與標籤之間的關係,我們也可以考慮不同特徵之間的關係來進行探究。例如,我們可以使用熱力圖來可視化特徵之間的關係:
# 繪製特徵之間的熱力圖
import seaborn as sns
corr_matrix = boston.corr().round(2)
sns.heatmap(data=corr_matrix, annot=True)
通過觀察熱力圖,我們可以發現有多個特徵之間存在較強的相關性,例如房屋的房間數(RM)和房屋的平均年齡(AGE)之間的負相關關係。
四、建模預測
1. 線性回歸
線性回歸可以被用來預測波士頓房價的範圍。我們可以使用train_test_split()函數來將數據分割成訓練集和測試集,並使用LinearRegression()來訓練我們的模型:
# 導入數據集
from sklearn.datasets import load_boston
boston_dataset = load_boston()
# 構建數據集並進行分割
from sklearn.model_selection import train_test_split
X = pd.DataFrame(boston_dataset.data, columns=boston_dataset.feature_names)
y = boston_dataset.target
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
# 訓練線性回歸模型
from sklearn.linear_model import LinearRegression
reg = LinearRegression().fit(X_train, y_train)
# 輸出模型評分
print("訓練集評分:{:.2f}".format(reg.score(X_train, y_train)))
print("測試集評分:{:.2f}".format(reg.score(X_test, y_test)))
我們可以將訓練集評分和測試集評分分別輸出,以評估我們的模型的性能。如果訓練集評分比測試集評分要高,這意味着我們的模型可能存在過擬合:即模型在訓練集上表現良好但在測試集上表現不佳。
2. KNN回歸
KNN回歸是另一種用于波士頓房價預測的常用算法。與線性回歸不同,KNN回歸不需要假設房價與特徵之間的關係是線性的。我們可以使用KNeighborsRegressor()來訓練我們的模型:
# 導入數據集
from sklearn.datasets import load_boston
boston_dataset = load_boston()
# 構建數據集並進行分割
from sklearn.model_selection import train_test_split
X = pd.DataFrame(boston_dataset.data, columns=boston_dataset.feature_names)
y = boston_dataset.target
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
# 訓練KNN回歸模型
from sklearn.neighbors import KNeighborsRegressor
knn = KNeighborsRegressor().fit(X_train, y_train)
# 輸出模型評分
print("訓練集評分:{:.2f}".format(knn.score(X_train, y_train)))
print("測試集評分:{:.2f}".format(knn.score(X_test, y_test)))
同樣,我們也可以將訓練集評分和測試集評分分別輸出,以評估我們的模型的性能。
五、總結
波士頓房價數據集是一個經典的回歸問題數據集,包含了1970年代末期波士頓的南部郊區共506個房屋樣本。特徵包括了房屋所在城市的犯罪率、每個城鎮平均房間數以及自有住房比例等。我們可以通過探索性數據分析來確定每個特徵和標籤之間的關係,也可以使用線性回歸和KNN回歸模型來預測波士頓房價的範圍。
原創文章,作者:DVZEX,如若轉載,請註明出處:https://www.506064.com/zh-hk/n/332875.html