波士顿房价预测(object has no attribute)


from sklearn.datasets import load_boston 
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LinearRegression
import matplotlib as Merge
import matplotlib as mpl


boston = load_boston() 
InputData = boston.data 
Result = boston.target 
df = pd.DataFrame(InputData , columns=boston.feature_names) 
df["MEDV"] = Result 
print(df.head(10))
print(df.describe())
# 为了方便实验,只取第6维特征。第6列为平均房间数目 
InputData = np.array(InputData)[:,5] 
# 保存原始数据集 
# Data = Merge([InputData,Result],['平均房间数目','房价']) 
# Data.to_excel('./原始数据.xlsx') 
# 改变数据集与真实房价数组的形状 
InputData = InputData.reshape((len(InputData), 1)) 
Result = np.array(Result).reshape((len(Result), 1)) 
# 把数据集分成训练数据集和测试数据集 
train_data,test_data,train_result,test_result = \
    train_test_split(InputData,Result,test_size=0.1,random_state=50) 
# 解决Matplotlib中的中文乱码问题,以便于后面实验结果可视化 
mpl.rcParams['font.sans-serif'] = [u'simHei'] 
mpl.rcParams['axes.unicode_minus'] = False
# 利用散点图可视化测试数据集,并保存可视化结果 
col = ['真实房价'] 
plt.scatter(test_data,test_result,alpha=0.5,c='b',s=10) 
plt.grid(True) 
plt.legend(labels = col,loc='best') 
plt.xlabel("房间数") 
plt.ylabel("真实房价") 
plt.savefig("./测试集可视化.jpg",bbox_inches='tight') 
plt.show() 
plt.close()

# 开始构建线性回归模型 
col = np.shape(train_data)[1]+1 
# 初始化线性回归参数theta 
theta = np.random.random((col,1)) 
# BGD、SGD、MBGD、正规方程优化的线性回归模型 
linearregression_BGD = LinearRegression(train_data, train_result,theta) 
linearregression_SGD = LinearRegression(train_data, train_result,theta) 
linearregression_MBGD = LinearRegression(train_data, train_result,theta) 
linearregression_NormalEquation = LinearRegression(train_data, train_result,theta) 
# 训练模型 
iter = 30000 # 迭代次数 
alpha = 0.001 # 学习率 
batch_size = 64 # 小样本规模 
# BGD、SGD、MBGD和正规方程的训练损失 
BGD_train_cost = linearregression_BGD.train_BGD(iter,alpha) 
SGD_train_cost = linearregression_SGD.train_SGD(iter,alpha) 
MBGD_train_cost = linearregression_MBGD.train_MBGD(iter,batch_size,alpha) 
# 利用正规方程获取参数 
linearregression_NormalEquation.getNormalEquation()

# 三种梯度下降算法迭代训练误差结果可视化,并保存可视化结果 
col = ['BGD','SGD','MBGD'] 
iter = np.arange(iter) 
plt.plot(iter, BGD_train_cost, 'r-.') 
plt.plot(iter, SGD_train_cost, 'b-') 
plt.plot(iter, MBGD_train_cost, 'k--') 
plt.grid(True) 
plt.xlabel("迭代次数") 
plt.ylabel("平均训练损失") 
plt.legend(labels = col,loc = 'best') 
plt.savefig("./三种梯度算法的平均训练损失.jpg",bbox_inches='tight') 
plt.show() 
plt.close()

x = np.arange(int(np.min(test_data)), int(np.max(test_data))+1) 
x = x.reshape(len(x), 1) 
BGD = linearregression_BGD.test(x) 
SGD = linearregression_SGD.test(x) 
MBGD = linearregression_MBGD.test(x) 
NormalEquation = linearregression_NormalEquation.test(x) 
col = ['BGD', 'SGD', 'MBGD', '正规方程'] 
plt.plot(x, BGD, 'r-.') ; 
plt.plot(x, SGD, 'b-') 
plt.plot(x, MBGD, 'k--'); 
plt.plot(x, NormalEquation, 'g:') 
plt.scatter(test_data, test_result, alpha=0.5, c='b', s=10) 
plt.grid(True); 
plt.xlabel('房间数'); 
plt.ylabel('预测值') 
plt.legend(labels=col, loc='best') 
plt.savefig("./预测值比较.jpg", bbox_inches='tight') 
plt.show(); 
plt.close()

# 利用测试集进行线性回归预测 
# BGD、SGD、MBGD、正规方程算法的预测结果 
BGD_predict = linearregression_BGD.test(test_data) 
SGD_predict = linearregression_SGD.test(test_data) 
MBGD_predict = linearregression_MBGD.test(test_data) 
NormalEquation_predict = linearregression_NormalEquation.test(test_data) 
# 计算4种算法的方误差以及其统计信息 
# test_result之前的形状为(num,1),首先计算其转置后, 获得其第一个元素即可 test_result = test_result.T[0] 
# BGD、SGD、MBGD、正规方程算法的方误差 
BGD_error = ((BGD_predict-test_result)**2) 
SGD_error = ((SGD_predict-test_result)**2) 
MBGD_error = ((MBGD_predict-test_result)**2) 
NormalEquation_error = ((NormalEquation_predict-test_result)**2) 
# 整合四种算法的方误差到DataFrame 
error = [BGD_error,SGD_error,MBGD_error,NormalEquation_error] 
col = ['BGD', 'SGD', 'MBGD', '正则方程'] 
error = Merge(error,col) 
# 保存四种方误差及其统计信息 
error.to_excel("./四种算法的方预测误差原始数据.xlsx") 
error.describe().to_excel("./四种算法的预测误差平方统计.xlsx")

img


怎么解决呀