数学建模代码

导入相关库

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轴为商品房均价

你可能感兴趣的:(数学建模代码)