boston房价预测--机器学习Boston数据分析

1.采用散点图绘制相关性。

#分析波士顿房价数据集的数据相关性
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
#载入数据集  
data_url = "http://lib.stat.cmu.edu/datasets/boston"
raw_df = pd.read_csv(data_url, sep="\s+", skiprows=22, header=None)
boston = np.hstack([raw_df.values[::2, :], raw_df.values[1::2, :2]])
target = raw_df.values[1::2, 2]
x = boston 
y = target
plt.scatter(x[:, 5], y)
plt.show()

68eccb041b0a469888d27997bc5c2cea.png

2.输出出数据结构

print (u'形状:', x.shape)  
print (x[:10])  

47fc9128a3a54e1ead7c00d9515a7d3c.png

3.PCA

#PCA降维  
from sklearn.decomposition import PCA  
pca = PCA(n_components=2)
newData = pca.fit_transform(x) 
print (u'降维后数据:')  
print (newData[:4])  
print (u'形状:', newData.shape)  

4ebca571433547918057e565f147fac8.png

4.Lasso回归分析

import matplotlib.pyplot as plt
plt.rcParams["font.sans-serif"]=["SimHei"] #设置字体
plt.rcParams["axes.unicode_minus"]=False #该语句解决图像中的“-”负号的乱码问题
# 从sklearn.cross_validation 导入数据分割器。
from sklearn.model_selection import train_test_split
# 导入 numpy 并重命名为 np。
import numpy as np
from sklearn.linear_model import Ridge,Lasso
X = boston
y = target
# 随机采样 25% 的数据构建测试样本,其余作为训练样本。
X_train, X_test, y_train, y_test = train_test_split(X, y, random_state=33, test_size=0.25)
# 分析回归目标值的差异。
print("The max target value is", np.max(target))
print("The min target value is", np.min(target)) 
print("The average target value is", np.mean(target))


# 从 sklearn.preprocessing 导入数据标准化模块。
from sklearn.preprocessing import StandardScaler
from sklearn.preprocessing import MinMaxScaler
from sklearn.preprocessing import Normalizer
# 分别初始化对特征和目标值的标准化器。
ss_X = StandardScaler()
ss_y = StandardScaler()
ss="StandardScaler"
# 分别对训练和测试数据的特征以及目标值进行标准化处理。
X_train = ss_X.fit_transform(X_train)
X_test = ss_X.transform(X_test)
y_train = ss_y.fit_transform(y_train.reshape(-1, 1))

y_test = ss_y.transform(y_test.reshape(-1, 1))
# 从 sklearn.linear_model 导入 LinearRegression。
from sklearn.linear_model import LinearRegression
# 使用默认配置初始化线性回归器 LinearRegression。

def train_model():
    lr = LinearRegression()
    # 使用训练数据进行参数估计。
    lr.fit(X_train, y_train[:,0])
    # 对测试数据进行回归预测。
    lr_y_predict = lr.predict(X_test)
    # 从 sklearn.linear_model 导入 SGDRegressor。
    from sklearn.linear_model import SGDRegressor
    # 使用默认配置初始化线性回归器 SGDRegressor。
    sgdr = SGDRegressor()
    # 使用训练数据进行参数估计。
    sgdr.fit(X_train, y_train[:,0])
    # 对测试数据进行回归预测。
    sgdr_y_predict = sgdr.predict(X_test)
    ridge = Ridge(alpha=10)
    # 使用训练数据进行参数估计。
    ridge.fit(X_train, y_train[:,0])
    # 对测试数据进行回归预测。
    ridge_y_predict = ridge.predict(X_test)
   # Lasso
    lasso = Lasso(alpha=0.01)
    # 使用训练数据进行参数估计。
    lasso.fit(X_train, y_train[:,0])
    # 对测试数据进行回归预测。
    lasso_y_predict = lasso.predict(X_test)
    
    return lr,sgdr,ridge,lasso,lr_y_predict,sgdr_y_predict,ridge_y_predict,lasso_y_predict
  


 
    #显示柱状图的高度文本
    for i in range(len(classes)):
        plt.text(r2s_x[i],model1[i], model1[i],va="bottom",ha="center",fontsize=8)
        plt.text(mess_x[i],model2[i], model2[i],va="bottom",ha="center",fontsize=8)
        #plt.text(nmse_x[i],model3[i], model3[i],va="bottom",ha="center",fontsize=8)
        #plt.text(mae_x[i],model4[i], model4[i],va="bottom",ha="center",fontsize=8)

 
    #显示图例
    plt.legend(loc="upper right")
    plt.show()

    #coding=gbk;
   
def plot_line(X,y,model,name):
   
    #--------------------------------------------------------------
    #z是我们生成的等差数列,用来画出线性模型的图形。
    z=np.linspace(0,50,200).reshape(-1,1)
    plt.scatter(y,ss_y.inverse_transform(model.predict(ss_X.transform(X)).reshape(len(X),-1)),c="orange",edgecolors='k')
    plt.plot(z,z,c="k")
    plt.xlabel('y')
    plt.ylabel("y_hat")
    plt.title(name)
    plt.show()
   

lr,sgdr,ridge,lasso,lr_y_predict,sgdr_y_predict,ridge_y_predict,lasso_y_predict=train_model()

models=[lr,sgdr]
r2s=[]
mess=[]
maes=[]
nmse=[]
results=[]
plot_line(X,y,lr,'LinearRegression+'+ss)
plot_line(X,y,sgdr,'SGDRegressor+'+ss)
#plot_line(X,y,lasso,'lasso'+ss)
#plot_line(X,y,ridge,'ridge'+ss)
print("sgdr_y_predict")
print(sgdr_y_predict)
        

    #evaluate(X_test,y_test,sgdr_y_predict,sgdr)
plot(results[0][1:4],results[1][1:4])
p=pd.DataFrame(result,columns=['波士顿房价预测值'])
p.to_csv('房价预测.csv')#波士顿房价预测值保存为csv文件

08e66b64b6ef4aeba4d991bf9a681148.png

0976b2bd903b4768be654c98afdc055b.png

e1b2acd1056f473ba5797b599956c1d3.png

 

 

 

  • 11
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

卡卡_R-Python

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值