python回归分析预测模型_Python与线性回归模型预测房价

目录提出问题

理解数据

数据清洗

构建模型

模型评估

总结

1. 提出问题

房价和什么因素相关?进而得知如何挑选房子?

2. 理解数据

2.1 导入数据

从Kaggle 中下载

2.2 导入数据

import pandas as pd

import numpy as np

import matplotlib.pyplot as plt

import seaborn as sns

导入训练数据与测试数据批量进行数据清洗。

#训练数据集

df_train= pd.read_csv('./train.csv')

#测试数据集

df_test= pd.read_csv('./test.csv')

print("训练集数据:",df_train.shape,"测试训练集:", df_test.shape)

训练集数据: (1460, 81) 测试训练集: (1459, 80)

#合并数据集,以便同步数据清洗

full = df_train.append(df_test,ignore_index=True)

print("合并后的数据集:",full.shape)

合并后的数据集: (2919, 81)

2.3 查看数据集信息

full.columns

full.head()

full.info()由于数据项太多,这里只展示节选数据

3. 数据清洗

3.1 处理缺失值

数据有明显缺失值,其中数据项Alley, Fence, MiscFeature, PoolQC 等缺失率高达90%,直接删除它们。

full.drop(['Alley','Fence','MiscFeature','PoolQC'],axis=1,inplace=True)

3.2 处理分类特征 —— One-hot encoding

为了提高数据分析的可信度,此处把所有的分类数据降维,批量进行独热编码。

object_type=[]

for col in full.columns:

if full[col].dtype =="object":

object_type.append(col)

full_dummied_object = full

for ob in object_type:

objectDf=pd.DataFrame()

objectDf=pd.get_dummies(full_dummied_object[ob],prefix=ob)

full_dummied_object=pd.concat([full_dummied_object,objectDf],axis=1)

full_dummied_object.drop(ob,axis=1,inplace=True)

full_dummied_object.head()

3.3 数据相关性

数据太多,先找出和“标签”关联性最大的10个“特征”再进行下一步分析。

Correlation Martix (heatmap style)

通过热力图形象看出数据项之间的相关关系。

cor_mart=full_dummied_object.corr()

k=10

cols=cor_mart.nlargest(k,'SalePrice')['SalePrice'].index

cm=np.corrcoef(full_dummied_object[cols].values.T)

sns.set(font_scale=1.25)

hm=sns.heatmap(cm,cbar=True, annot=True, square=True,fmt='.2f',annot_kws={'size':10},yticklabels=cols.values, xticklabels=cols.values)

plt.show()

显示前10个相关性最强的特征。

cor_mart['SalePrice'].sort_values(ascending =False)[0:11]

# 特征选择

full_X = full_dummied_object[['OverallQual','GrLivArea','GarageCars','GarageArea',

'TotalBsmtSF','1stFlrSF','FullBath','BsmtQual_Ex','TotRmsAbvGrd','YearBuilt']]

full_X.head()

4.构建模型

4.1 建立训练数据集和测试数据集

#原始数据集有1460行

sourceRow=1460

#原始数据集:特征

source_X = full_X.loc[0:sourceRow-1,:]

#原始数据集:标签

source_y = full_dummied_object.loc[0:sourceRow-1,'SalePrice']

#预测数据集:特征

pred_X = full_X.loc[sourceRow:,:]

#原始数据集有多少行

print('原始数据集有多少行:',source_X.shape[0])

#预测数据集大小

print('原始数据集有多少行:',pred_X.shape[0])

原始数据集有多少行: 1460

原始数据集有多少行: 1459

from sklearn.model_selection import train_test_split

#建立模型用的训练数据集和测试数据集

train_X, test_X, train_y, test_y = train_test_split(source_X, source_y, train_size=.8)

4.2 选择机器学习方法 --线性回归

from sklearn.linear_model import LinearRegression

model = LinearRegression()

model.fit(train_X , train_y)

LinearRegression(copy_X=True, fit_intercept=True, n_jobs=None, normalize=False)

model.score(test_X, test_y)

0.8269044883096861

5. 总结

经数据清洗后,建立的线性回归模型准确率为82.7%。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值