利用回归树对Boston房价进行预测,并对结果进行评估

来源:互联网 发布:山东实验中学校服淘宝 编辑:程序博客网 时间:2024/05/29 18:01
from sklearn.cross_validation import train_test_split
from sklearn.preprocessing import StandardScaler
from sklearn.tree import DecisionTreeRegressor

from sklearn.metrics import mean_squared_error,mean_absolute_error

'''注:回归树的叶节点的数据类型不是离散型,而是连续型,决策树每个叶节点依照训练数据表现的概率倾向决定最终的预测类别,而回归树叶节点是连续的,节点的值是‘一团数据’的均值'''

#导入数据

boston = load_boston()
#查看数据信息print(boston.DESCR)
X = boston.data
y = boston.target 
#对数据进行分割
X_train,X_test,y_train,y_test = train_test_split(X,y,test_size=0.25,random_state=33)
ss_X = StandardScaler()
ss_y =StandardScaler()
#分别对训练和测试数据的特征及目标值进行标准化处理
X_train = ss_X.fit_transform(X_train)
X_test = ss_X.transform(X_test)
y_train = ss_y.fit_transform(y_train)
y_test = ss_y.transform(y_test)
#使用默认的配置初始化DecisionTreeRegressor
dtr = DecisionTreeRegressor()
#用波士顿房价的数据构建回归树
dtr.fit(X_train,y_train)
#使用默认配置的单一回归树对测试数据进行测试
dtr_y_predict = dtr.predict(X_test)

#使用R-squared,MSE以及MAE三种指标对默认配置的回归树在测试集上进行性能评估
print('R-squared value of DecisionTreeRegressor:',dtr.score(X_test,y_test))
print('\n'*2)
print('The mean squared error of DecisionTreeRegressor: ',mean_squared_error(ss_y.inverse_transform(y_test),ss_y.inverse_transform(dtr_y_predict)))
print('\n'*2)

print('The mean absolute error of DecisionTreeRegressor:',mean_absolute_error(ss_y.inverse_transform(y_test),ss_y.inverse_transform(dtr_y_predict)))

'''树模型型的优缺点'

优点:1.树模型可以解决非线性特征问题 2.树模型不要求对特征标准化和同一量化,即数值型和类别型特征都可以直接被应用到树模型的构建和预测中 3.因为上述原因,树模型也可以直观的输出决策过程,使得预测结果具有可解释性

缺点:1.正是因为树模型可以解决复杂的非线性拟合问题,所以更加容易因为模型搭建过于复杂而丧失对新数据预测的精度(泛化力);2树模型从上至下的预测流程会因为数据的细微更改而发生较大的结构变化,因此稳定性较差;3.依托训练数据构建最佳的树模型是NP难问题,即在有限时间内无法找到最优解的问题,因此使用类似的贪婪算法的解只能找到一些次优解,这也是为什么我们经常借助集成模型,在多个次优解中寻觅更高的模型性能。

''

阅读全文
0 0
原创粉丝点击