1000字范文,内容丰富有趣,学习的好帮手!
1000字范文 > 数据分析-回归-案例-波士顿房价数据集

数据分析-回归-案例-波士顿房价数据集

时间:2018-08-02 23:09:02

相关推荐

数据分析-回归-案例-波士顿房价数据集

@数据分析-回归-波士顿房价数据集

数据来源:

boston-housing-dataset

目录

1、目标

2、数据集介绍

3、代码

3.1 导入必须的工具包

3.2 导入数据

3.3 数据探索

3.4 数据集划分

3.5 模型构建

3.6评价

1、目标

根据历史房价数据建立回归模型,预测不同类型房屋的价格。

2、数据集

样本数:10000

特征数量: 13个相关属性(即13个指标变量),1个目标变量(房价)。

特征 说明

CRIM 城镇人均犯罪率

ZN 大于25,000平方英尺的地块划分为住宅用地的比例

INDUS 每个城镇非零售业务的比例

CHAS 查尔斯河虚拟变量(如果 = 1则为河; =0则不为河)

NOX 一氧化氮浓度(每千万)

RM 每间住宅的平均房间数

AGE 自住房屋是在1940年之前建造的比例

DIS 到加州五个就业中心的加权距离

RAD 对径向高速公路的可达性指数

TAX 每10,000美元的全价物业税

PTRATIO 城镇的学生与教师比例

B 1000(Bk-0.63)^ 2其中Bk是城镇的黑人的比例

LSTAT 低社会阶层人口比例%

MEDV 以1000美元为单位的自住房屋的中位数价格

3 代码

3.1 导入必须的工具包

import numpy as npimport pandas as pdfrom sklearn import preprocessingfrom sklearn.model_selection import train_test_splitfrom sklearn.linear_model import LinearRegression,Lasso,ElasticNetfrom sklearn.metrics import r2_scorefrom sklearn.metrics import mean_squared_errorimport matplotlib.pyplot as plt%matplotlib inlineimport seaborn as sn

3.2 读入数据

data = pd.read_csv("d:/datasets/HousingData.csv")#读取csv

3.3 数据探索

查看数据的类型,完整性

查看数据的统计特征(均值、方差等)

data.head() #查看前五行data.tail()data.sample()data.info() #查看数据的类型,完整性data.describe() #查看数据的统计特征(均值、方差等)data.dropna(inplace=True) #删除有缺失的样本

通过散点图展示各特征与目标变量的关系

for id in data.columns[:-1]:sn.pairplot(data[[id,data.columns[-1]]])

特征与标签分离,y = 波士顿房价,X = 输入变量

y = data['MEDV'] # 标签-房价X = data.drop(['MEDV'], axis=1) #去掉标签(房价)的数据子集

3.4 数据集划分

X_train为训练数据, y_train为训练集标签,X_test为测试数据,y_test为测试集标签。

抽取70%的数据作为训练集, 用剩余样本进行分类结果测试。

X_train, X_test, y_train, y_test = train_test_split(X, y, test_size = 0.3)

3.5 数据标准化

Z-score标准化,在训练集上训练,在训练集与测试集上标准化,泛化时标准化也用训练集上的训练结果。

scaler=preprocessing.StandardScaler().fit(X_train)X_train=scaler.transform(X_train)X_test=scaler.transform(X_test)

3.6 模型构建\训练\预测\评价

LinearRegression回归模型:

lr = LinearRegression() #实例化一个线性回归对象lr.fit(X_train, y_train) #采用fit方法,拟合回归系数和截距print(lr.intercept_) #输出截距print(lr.coef_) #输出系数 可分析特征的重要性以及与目标的关系y_pred = lr.predict(X_test)#模型预测print("R2=",r2_score(y_test, y_pred))#模型评价, 决定系数#print("mse=",mean_squared_error(y_test, y_pred))#均方误差#print(lr.intercept_) #输出截距#print(lr.coef_) #系数

0.724490756717

可视化预测值与真实值

plt.plot(y_test.values,c="r",label="y_test")plt.plot(y_pred,c="b",label="y_pred")plt.legend()

ElasticNet回归

EN=ElasticNet(0.01) #实例化弹性网络回归对象EN.fit(X_train,y_train) #训练y_pred=EN.predict(X_test) #预测#评价print(r2_score(y_pred,y_test)) #print("mse=",mean_squared_error(y_test, y_pred))#均方误差y_predt=EN.predict(X_train) #查看训练集上的效果print(r2_score(y_predt,y_train))

0.62064747010401630.7143978031016661

lasso回归

la = Lasso()la.fit(X_train, y_train)#拟合y_pred=la.predict(X_test) #预测#评价print(r2_score(y_pred,y_test)) #print("mse=",mean_squared_error(y_test, y_pred))#均方误差y_predt=la.predict(X_train) #查看训练集上的效果print(r2_score(y_predt,y_train))#prtin(la.coef_) #输出系数 (部分系数为“0”,lasso常用与特征提取) 可分析特征的重要性以及与目标的关系

0.6463644765180.7135957871520437

岭回归

from sklearn.linear_model import Ridgerd=Ridge(0.01)rd.fit(X_train,y_train)y_pred=rd.predict(X_test)print(r2_score(y_pred,y_test))y_predt=rd.predict(X_train)print(r2_score(y_predt,y_train))

0.62545951519462030.717315101727843

贝叶斯岭回归

from sklearn.linear_model import BayesianRidgeBrd=BayesianRidge()Brd.fit(X_train,y_train)y_pred=Brd.predict(X_test)print(r2_score(y_pred,y_test))y_predt=Brd.predict(X_train)print(r2_score(y_predt,y_train))

0.61177918601523020.708456749967072

K近邻回归

from sklearn.neighbors import KNeighborsRegressorKnr=KNeighborsRegressor()Knr.fit(X_train,y_train)y_pred=Knr.predict(X_test)print(r2_score(y_pred,y_test))y_predt=Knr.predict(X_train)r2_score(y_predt,y_train)

0.474663123800456830.7576061948485711

支持向量回归

from sklearn.svm import SVRsvr=SVR()svr.fit(X_train,y_train)y_pred=svr.predict(X_test)print(r2_score(y_pred,y_test))y_predt=svr.predict(X_train)r2_score(y_predt,y_train)

-0.3945293748344476 #训练效果差到不如用均值估计0.1313717790081549

决策树回归

from sklearn.tree import DecisionTreeRegressordtr=DecisionTreeRegressor(max_depth=4)dtr.fit(X_train,y_train)y_pred=dtr.predict(X_test)print(r2_score(y_pred,y_test))y_predt=dtr.predict(X_train)print(r2_score(y_predt,y_train))

0.77959243788351330.8862706664213111

多项式回归

from sklearn.preprocessing import PolynomialFeaturespoly = PolynomialFeatures(degree=2) # 添加特征(升维)poly.fit(X_train)poly.fit(X_test)X_1 = poly.transform(X_train)X_2 = poly.transform(X_test)# 训练lin_reg = LinearRegression()lin_reg.fit(X_1, y_train)#预测、评价y_pred = lin_reg.predict(X_1)print(r2_score(y_pred,y_train))y_pred = lin_reg.predict(X_2)print(r2_score(y_pred,y_test))

0.9613453122107047 #训练集效果很好,测试集一般,过拟合0.7262626772433789

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。