房价预测

导入数据集

  导入三个数据集,index_col=0表示将数据集第一列作为索引,如果数据集自带索引可以使用此属性。训练集里data和target放在一个csv里,测试集中的data和target放在两个csv.我们将测试集的target

和data放在一个csv里,这样更方便缺失值的处理。

1 import pandas as pd
2 train=pd.read_csv('train.csv',index_col=0)
3 test=pd.read_csv('test.csv',index_col=0)
4 sub=pd.read_csv('sub.csv',index_col=0)
5 test['SalePrice']=sub['SalePrice']

查看缺失率

训练集缺失率

1 #训练集数值特征
2 train_number_tz = train.iloc[:,0:-1].dtypes[train.dtypes != "object"].index
3 # 训练集非数值特征
4 train_str_tz = train.iloc[:,0:-1].dtypes[train.iloc[:,0:-1].dtypes == "object"].index
5 # 计算两类特征的缺失率并排行
6 miss = 100 * train.loc[:, train_number_tz].isnull().mean()
7 train_num_rank=miss[miss.values > 0].sort_values(ascending=False)
8 miss = 100 * train.loc[:, train_str_tz].isnull().mean()
9 train_str_rank=miss[miss.values > 0].sort_values(ascending=False)

训练集缺失率如下。

   图1-1数值型特征数据缺失率           图1-2非数值型缺失率

测试集缺失率

# 数值特征
test_number_tz = test.iloc[:,0:-1].dtypes[test.dtypes != "object"].index
# 非数值特征
test_str_tz = test.iloc[:,0:-1].dtypes[test.iloc[:,0:-1].dtypes == "object"].index
# 计算缺失率
miss = 100 * test.loc[:, test_number_tz].isnull().mean()
test_num_rank=miss[miss.values > 0].sort_values(ascending=False)
miss = 100 * test.loc[:, test_str_tz].isnull().mean()
test_str_rank=miss[miss.values > 0].sort_values(ascending=False)

测试集缺失率如下.

  图1-3数值型特征数据缺失率     图1-4非数值型特征数据缺失率

数据预处理

特征处理

1 # 训练集和测试集有4个共同的缺失率很高的特征,我们直接舍弃
2 dellist=['PoolQC', 'MiscFeature', 'Alley', 'Fence']
3 train=train.drop(dellist,axis=1)
4 test=test.drop(dellist,axis=1)

数值型数据处理

1 # 数值型数据我们采用中位数或者平均数填充
2 train[train_number_tz]=train[train_number_tz].fillna(train[train_number_tz].mean())
3 test[test_number_tz]=test[test_number_tz].fillna(test[test_number_tz].mean())

字符型数据处理

1 # 字符型数据缺失我们用unknow填充,但不是给所有非数值特征缺失值都用unknow填充,我们给他们共有的一部分属性用unknow填充,其他特征缺失的数据直接整条舍弃,这样更有利于后面编码。
2 commonlist=['FireplaceQu', 'GarageType', 'GarageFinish', 'GarageQual', 'GarageCond',
3        'BsmtExposure', 'BsmtFinType2', 'BsmtQual', 'BsmtCond', 'BsmtFinType1']
4 train[commonlist]=train[commonlist].fillna('unknow')
5 train.dropna(axis=0,inplace=True)
6 test[commonlist]=test[commonlist].fillna('unknow')
7 test.dropna(axis=0,inplace=True)

数据分割

缺失值处理完后,我们将数据集里面的data和target分开。

1 train_data=train.iloc[:,0:-1]
2 train_target=train['SalePrice']
3 test_data=train.iloc[:,0:-1]
4 test_target=train['SalePrice']

哑编码

字符型数据我们不能直接训练,需要对它们进行编码再与数值型数据结合。

1 # 哑编码
2 train_data_strout=train_data[train_str_tz]
3 traincode=pd.get_dummies(train_data_strout)
4 test_data_strout=test_data[test_str_tz]
5 testcode=pd.get_dummies(test_data_strout)
6 # 将哑编码后的数据与数值型数据结合组成最终数据
7 traindata_ult=pd.concat([train_data[train_number_tz],traincode],axis=1)
8 testdata_ult=pd.concat([test_data[test_number_tz],testcode],axis=1)

模型训练

1.线性回归模型

1 from sklearn.linear_model import LinearRegression
2 lr = LinearRegression()
3 lr.fit(traindata_ult, train_target)
4 lr.score(testdata_ult,test_target)

评分如下图.

 

           图2-1线性回归模型评分

2.线性核函数配置的支持向量机回归训练

1 from sklearn.svm import SVR
2 # 使用线性核函数配置的支持向量机进行回归训练,并且对测试样本进行预测。
3 linear_svr = SVR(kernel='linear')
4 linear_svr.fit(traindata_ult, train_target)
5 linear_svr.score(testdata_ult,test_target)

评分如图2-2

           图2-2支持向量机回归模型评分

3.K-近邻回归平均算法

1 # 从sklearn.neighbors导入KNeighborRegressor(K近邻回归器)。
2 from sklearn.neighbors import KNeighborsRegressor
3 # 初始化K近邻回归器,并且调整配置,使得预测的方式为平均回归:weights='uniform'。
4 uni_knr = KNeighborsRegressor(weights='uniform')
5 uni_knr.fit(traindata_ult, train_target)
6 uni_knr.score(testdata_ult,test_target)

评分如图2-3.

        图2-3K-近邻回归平均算法评分

4.K-近邻回归权重算法

# 初始化K近邻回归器,并且调整配置,使得预测的方式为根据距离加权回归:weights='distance'。
dis_knr = KNeighborsRegressor(weights='distance')
dis_knr.fit(traindata_ult, train_target)
dis_knr.score(testdata_ult,test_target)

评分如图2-4

         图2-4 K-近邻回归权重算法评分

 

 

 

 

 

 

 

 

posted @ 2021-09-26 16:29  李点  阅读(64)  评论(0)    收藏  举报