导入相关库
import graphlab
import numpy
import matplotlib.pyplot as plt
%matplotlib inline
data = graphlab.SFrame('house.csv')
显示各因素与房价散点图
matplotlib无法显示中文
x,y=data['人均消费性支出(元)'],data['单位商品房房价(元/m2)']
plt.scatter(x,y,c='red',edgecolors='white')
plt.title(u'商品房均价与居民人均消费水平关系')
plt.xlabel(u'居民人均消费水平(元)')
plt.ylabel(u'商品房均价(元)')
plt.grid(True)
plt.show()
x,y=data['房地产开发投资(亿元)'],data['单位商品房房价(元/m2)']
plt.scatter(x,y,c='blue',edgecolors='white')
plt.title(u'商品房均价与房地产投资总额关系')
plt.xlabel(u'城镇居民人均可支配收入(元)')
plt.ylabel(u'商品房均价(元)')
plt.grid(True)
plt.show()
x,y=data['地区生产总值(亿元)'],data['单位商品房房价(元/m2)']
plt.scatter(x,y,c='green',edgecolors='white')
plt.title(u'商品房均价与地区生产总值关系')
plt.xlabel(u'地区生产总值')
plt.ylabel(u'商品房均价(元)')
plt.grid(True)
plt.show()
x,y=data['竣工面积(万平方米)住宅'],data['单位商品房房价(元/m2)']
plt.scatter(x,y,c='green',edgecolors='white')
plt.title(u'商品房均价与商品房竣工面积关系')
plt.xlabel(u'商品房竣工面积(万平方米)')
plt.ylabel(u'商品房均价(元)')
plt.grid(True)
plt.show()
x,y=data['人口密度(人/平方千米)'],data['单位商品房房价(元/m2)']
plt.scatter(x,y,c='green',edgecolors='white')
plt.title(u'商品房均价与人口密度关系')
plt.xlabel(u'人口密度(人/平方千米)')
plt.ylabel(u'商品房均价(元)')
plt.grid(True)
plt.show()
定义寻找最佳岭回归参数值的函数
def loo(data, l1_penalty_values):
num_folds = len(data)
folds = graphlab.cross_validation.KFold(data,num_folds) #构建K次交叉验证列表
l1_penalty_mse = []
min_mse = None
best_l1_penalty = None
for l1_penalty in l1_penalty_values:
next_mse = 0.0
for train_set, validation_set in folds:
#构建线性回归模型
model = graphlab.linear_regression.create(
train_set,target='单位商品房房价(元/m2)',
features=['人均消费性支出(元)','房地产开发投资(亿元)',
'竣工面积(万平方米)住宅','地区生产总值(亿元)',
'人口密度(人/平方千米)'],
l1_penalty=l1_penalty,
validation_set=None,verbose=False)
test_predicted = model.predict(validation_set)#预测房价
next_mse += (test_predicted-validation_set['单位商品房房价(元/m2)'])[0]**2
next_mse = next_mse/num_folds
if min_mse is None or next_mse < min_mse:
min_mse = next_mse
best_l1_penalty = l1_penalty
return best_l1_penalty #返回最小均方差以及最好系数
去除2014异常年份, 执行函数
data = data[data['年份']!=2014]
l1_penalty_values=numpy.logspace(-4, 5, num=1000)
#l1_penalty_values =
# [ 1.00000000e-04, 1.00000000e-03, 1.00000000e-02,
# 1.00000000e-01, 1.00000000e+00, 1.00000000e+01,
# 1.00000000e+02, 1.00000000e+03, 1.00000000e+04,
# 1.00000000e+05]
best_l1_penalty = loo(data,l1_penalty_values) #best_l1_penalty=5594.32570617
构建最终模型
model = graphlab.linear_regression.create(
data,target='单位商品房房价(元/m2)',
features=['人均消费性支出(元)','房地产开发投资(亿元)',
'竣工面积(万平方米)住宅','地区生产总值(亿元)',
'人口密度(人/平方千米)'],
l1_penalty=best_l1_penalty,
validation_set=None,verbose=False)
获取模型系数
model.get('coefficients')
评估模型
model.evaluate(data)
画出模型预测价格与原价格比较图
plt.plot(data['年份'],data['单位商品房房价(元/m2)'],'.',#点为实际值
data['年份'],model.predict(data),'-')#折现为预测值
# X轴为年份 Y轴为商品房均价