简单的GBDT调用见官方例子:
import numpy as np
import matplotlib.pyplot as plt
from sklearn import ensemble
from sklearn import datasets
from sklearn.utils import shuffle
from sklearn.metrics import mean_squared_error
boston = datasets.load_boston()
X, y = shuffle(boston.data, boston.target, random_state = 13 )
X = X.astype(np.float32)
offset = int(X.shape[0] * 0.9 )
X_train, y_train = X[:offset], y[:offset]
X_test, y_test = X[offset:], y[offset:]
params = { ' n_estimators ' : 500 , ' max_depth ' : 4 , ' min_samples_split ' : 2 ,
' learning_rate ' : 0.01 , ' loss ' : ' ls ' }
clf = ensemble.GradientBoostingRegressor( ** params)
clf.fit(X_train, y_train) # 训练
mse = mean_squared_error(y_test, clf.predict(X_test)) # 预测并且计算MSE
# print 2.7和3.0版本有区别
print " MSE: %.4f " % mse
# compute test set deviance
test_score = np.zeros((params[ ' n_estimators ' ],), dtype = np.float64) # 矩阵转化
for i, y_pred in enumerate(clf.staged_predict(X_test)):
test_score[i] = clf.loss_(y_test, y_pred)
plt.figure(figsize = ( 12 , 6 ))
plt.subplot( 1 , 2 , 1 )
plt.title( ' Deviance ' )
plt.plot(np.arange(params[ ' n_estimators ' ]) + 1 , clf.train_score_, ' b- ' ,
label = ' Training Set Deviance ' )
plt.plot(np.arange(params[ ' n_estimators ' ]) + 1 , test_score, ' r- ' ,
label = ' Test Set Deviance ' )
plt.legend(loc = ' upper right ' )
plt.xlabel( ' Boosting Iterations ' )
plt.ylabel( ' Deviance ' )
# Plot feature importance
feature_importance = clf.feature_importances_
# make importances relative to max importance
feature_importance = 100.0 * (feature_importance / feature_importance.max())
sorted_idx = np.argsort(feature_importance)
pos = np.arange(sorted_idx.shape[0]) + . 5
plt.subplot( 1 , 2 , 2 )
plt.barh(pos, feature_importance[sorted_idx], align = ' center ' )
plt.yticks(pos, boston.feature_names[sorted_idx])
plt.xlabel( ' Relative Importance ' )
plt.title( ' Variable Importance ' )
plt.show()
输出:
结论:LSTAT>RM>DIS………
房产的数据结构:
- CRIM per capita crime rate by town
- ZN proportion of residential land zoned for lots over 25,000 sq.ft.
- INDUS proportion of non-retail business acres per town
- CHAS Charles River dummy variable (= 1 if tract bounds river; 0 otherwise)
- NOX nitric oxides concentration (parts per 10 million)
- RM average number of rooms per dwelling
- AGE proportion of owner-occupied units built prior to 1940
- DIS weighted distances to five Boston employment centres
- RAD index of accessibility to radial highways
- TAX full-value property-tax rate per $10,000
- PTRATIO pupil-teacher ratio by town
- B 1000(Bk - 0.63)^2 where Bk is the proportion of blacks by town
- LSTAT % lower status of the population
- MEDV Median value of owner-occupied homes in $1000's
源代码读取csv文件方法详解:
def load_boston():
"""Load and return the boston house-prices dataset (regression).
============== ==============
Samples total 506
Dimensionality 13
Features real, positive
Targets real 5. - 50.
============== ==============
Returns
-------
data : Bunch
Dictionary-like object, the interesting attributes are:
'data', the data to learn, 'target', the regression targets,
and 'DESCR', the full description of the dataset.
Examples
--------
>>> from sklearn.datasets import load_boston
>>> boston = load_boston()
>>> print(boston.data.shape)
(506, 13)
"""
module_path = dirname(__file__)
fdescr_name = join(module_path, 'descr', 'boston_house_prices.rst')
with open(fdescr_name) as f: #with用法可以自动关闭,读取文件声明
descr_text = f.read()
data_file_name = join(module_path, 'data', 'boston_house_prices.csv')
with open(data_file_name) as f:
data_file = csv.reader(f) #csv读取文件,获得迭代器
temp = next(data_file) #读取文件头,获得总行数和字段名
n_samples = int(temp[0])
n_features = int(temp[1])
data = np.empty((n_samples, n_features)) #建立矩阵
target = np.empty((n_samples,))
temp = next(data_file) # names of features
feature_names = np.array(temp)
for i, d in enumerate(data_file): #一行一行通过迭代器读取文件设置到矩阵中
data[i] = np.asarray(d[:-1], dtype=np.float)
target[i] = np.asarray(d[-1], dtype=np.float)
return Bunch(data=data,
target=target,
# last column is target value
feature_names=feature_names[:-1],
DESCR=descr_text)
方法说明:
1、with是python的一种用法,可以自动关闭对应的资源
2、next
(iterator[, default]) 迭代器遍历方法
3、reader
(csvfile, dialect='excel', **fmtparams) :返回一个迭代器
Return a reader object which will iterate over lines in the given csvfile.
类的主要方法介绍:
构造函数:
loss
learning_rate
n_estimators
max_depth
criterion
min_samples_split
min_samples_leaf
min_weight_fraction_leaf
subsample
max_features
max_leaf_nodes
min_impurity_split
alpha
init
verbose
warm_start
random_state
presort
属性
方法
feature_importances_ :重要的特性
oob_improvement_:
train_score_ :训练分数
loss_ :损失函数
`init` : 评估期
estimators_ : ndarray of DecisionTreeRegressor, shape = [n_estimators, 1]
方法:
后续待补充详细参数说明