python机器学习API介绍8:回归决策树API

python机器学习API介绍8:回归决策树API

scikit-learn中有两类决策树,他们均可选用优化的CART决策树算法(关于决策树中算法的简介,因为内容过于杂乱,需求很高的篇幅介绍,有爱好的同学能够找对应的书本学习或许重视我后续文章对其独自介绍),一起这儿将python机器学习库介绍修正为了python机器学习API介绍,这儿和本来的初衷不太相同,专心介绍python机器学习中常见的API(托言)。

回归决策树API:DecisionTreeRegressor是完成回归决策树的API,用于回归问题,其原型为:

classsklea标签19rn.linear_model.DecisionTreeRegressor(criterion='mse', splitter='best',max_depth=None, min_samples_split=2, min_sample_leaf=1, min_weight_fraction_leaf=0, max_feature=None, random_state=None, max_leaf_nodes=None,presort=False)

参数阐明:

criterion:一个字符串,指定切分质量的点评准则,默许为‘mse’,且现在支撑支该字符串,表明均方差错。

splitter:一个字符串,指定切分准则(‘best’:表明最优的切分。‘random’:表明随即切分)。

max_features:一个整数、浮点数、字符串或许为None,指定寻觅best split时考虑的特征数量(假如是整数,则表明每次切分只考虑max_features个特征;假如为浮点数,表明每次切分只考虑max_features*n_features个特征(max_features指定了百分比);假如是字符串‘suto’或‘sqrt’,则max_features等于‘n_features’;假如是字符串‘log2’,则max_features等于log2(n_featpython机器学习API介绍8:回归决策树APIures);假如为None,则max_feature等于n_features)。

假如现已考虑了max_features个特征,可是还没有找到一个有用的切分,那么还会持续寻觅下一个特征,直到找到一个有用的切分停止。

max_depth: 能够为整数或许为None,指定树的最大深度(假如为None,则表明树的深度不限(且每个叶子都是纯的——叶节点中所有样本都归于同一个类,或许叶子中包括小于min_samples_split个样本点);假如max_leaf_nodes参数非None,则疏忽此项挑选python机器学习API介绍8:回归决策树API)。

min_samples_split: 整数,指定每个内部节点(非叶节点)包括的最少样本数。

min_samples_leaf:整数,指定每个叶节点包括的最少样本数。

min_weight_fraction_leaf: 浮点数,也节点中样本的最小权重系数。

max_leaf_nodes: 整数或许为None,指定叶节点的最大值(为None时表明此叶节点数量不限;假如为非None,则max_depth被疏忽)。

class_weight:为一个字典、字典的列表、字符串‘balanced’或许None,指定分类的权重。权重方式为:{class_label:weight}(假如为None,表明每个分类的权重为1;假如为字符串‘balanced’则表明分类的权重是样本中各分类呈现的概率的反比。)——假如供给了sample_weight(由fit办法供给),则这些权重都会乘以sample_weight。

random_state:一个整数,或许一个RandomState实例,或许为None。(假如为整数,则它指定了随机数生成器的种子;假如为RandomState实例,则指定了随机数生成器python机器学习API介绍8:回归决策树API;假如为None,则运用默许的随机生成数据)

presort:布尔值,指定是否要提早排序数据然后加快寻觅最优切分的进程。设置为True时,关于大数据聚会减慢整体练习进程;可是关于小数据集或许设定了最大深度的情况下,则会加快练习进程。

特点阐明:

feature_importance:给出了特征的重要程度,该值越大,则该特征越重要(也称为Gini importance)。

max_feature_: max_features的揣度值。

n_features_:当指定fit后特征的数量。

n_outputs_: 履行fit后,输出的数量。

tree_:一个Tree目标,表明底层的决策树。

办法阐明:

fit(x, y[,sample_weight):练习模型。

predict(x):用模型进行猜测。

predict_log_proba(x):回来一个数组,数组的元素依次是x猜测为各个类别的概率的对数值。

predict_proba(x):回来一个数值,数组元素依次是x猜测为各个类别的概率值。

score(x, y[,sample_weight]):回来测验功能得分(测验分数不标签19超越1,可是可能为负数(当猜测作用太差的时分),score值越挨近1,阐明猜测作用越好)。

python实例阐明

#首要导入数据包

import numpy as np

from sklearn.tree import DecisionTreeRegressor

from sklea标签3rn import cross_validation

import matplotlib.pyplot as plt

#创立一个发生随机数的函数

def create_data(n):

np.random.seed(0)

x = 5 * np.random.ra标签19nd(n, 1)

y = np.sin(x).ravel()

noise_num = (int)(n/5)

y[::5] +=3 * (0.5 - np.random.rand(noise_num))

return cross_validation.train_test_split(x, y, test_size=0.25, random_state=1)

#函数阐明:上述函数的参数中,n为数据集容量。回来值:该函数回来一个元组,依次为练习集样本对应的值

#create函数发生的数据在sin(x)函数的基础上增加了若干个随机发生的噪声,x是随机在0-1之间发生,y是#sin(x)。

#其间的y每5个点发生一个噪声,然后将数据随机区分红练习集和测验集,指定测验集样本巨细为本来样本集的#0.25倍。

#下面是给出的测验函数

def test_DecisionTreeRegressor(*data):

x_tra标签5in,x_test,y_train,y_test=data

regr标签5 = DecisionTreeRegressor()

regr.fit(x_train, y_train)

print("Training score:%f"%(regr.score(x_train,y_train)))

print("Testing score:%f"%(regr.score(x_test,y_test)))

#绘图

fig=plt.figure()

ax=fig.add_subplot(1,1,1)

x = np标签5.arange(0.0, 5.0, 0.05)[:, np.newaxis]

# 看猜测 回归树的作用

y = regr.predict(x)

ax.scatter(x_train, y_train, label="train sample",c='g')

ax.scatter(x_test, y_test, label="test sample",c='r')

ax.plot(x, y, label="predict_value", linewidpython机器学习API介绍8:回归决策树APIth=2,alpha=0.5)

ax标签1.set_xlabe标签11l("data")

ax.set_ylabel("target")

ax.set_title("Decision Tree Regression")

ax.legend(framealpha=0.5)

plt.show()

x_train, x_test, y_train, y_test = create_data(100)

test_DecisionTreeRegressor(x_train, x_test, y_train, y_test)

将上述代码运转后,其成果如图:

DecisionTreeRegressor

由上述运转成果可知,得到的练习精度很好,可是测验精度却不行抱负,阐明数据在这种情况下泛化功能不行好。

接下来咱们查验随机区分与最优区分的影响,函数如下:

def test_DecisionTreeRegressor_splitpython机器学习API介绍8:回归决策树APIter(*data):

#查验 随机区分与最优区分对猜测功能的影响的影响

x_train,x_test,y_train,y_test=data

splitters=['best','random']

for splitter in spli标签17tters:

regr = DecisionTreeRegressor(splitter=splitter)

regr.fit(x_train, y_train)

print("Splitter %s"%splitter)

print("Training score:%f"%(regr.score(x_train,y_train)))

print("Testing score:%f"%(regr.score(x_test,y_test)))

x_train, x_test, y_train, y_test = create_data(100)

test_DecisionTreeRegressor_splitter(x_train, x_test, y_train, y_test)

def test_DecisionTreeRegressor_depth(*data,maxdepth):

#max_depth 对猜测功能的影响

x_train,x_test,y_train,y_test=data

# maxdepth表明最大深度

depths=np.arange(1,maxdepth)

training_scores=[]

testing_scores=[]

for depth in dep标签3ths:

regr = DecisionTreeRegressor(max_depth=depth)

regr.fit(x_train, y_train)

training_scores.append(regr.score(x_train,y_train))

testing_scorpython机器学习API介绍8:回归决策树APIes.append(regr.score(x_test,y_test))

## 标签10将对应的成果可视化

fig=plt.figure()

ax=fig.add_subplot(1,1,1)

ax.plot(depths,training_scores,label="traing score")

ax.plot(depths,testing_scores,label="testing score")

ax.set_xlabel("maxdepth value")

ax.set_ylabel("score value")

ax.set_title("Decision Tree Regression")

ax.legend(fra标签1mealpha=0.5)

plt.show()

x_tpython机器学习API介绍8:回归决策树APIrain, x_test, y_train, y_test = create_data(100)

test_DecisionTreeRegressor_depth(x_train, x_test, y_train, y_test, maxdepth=10)

上述代码运转后,其成果如下:

decision_tree_regressor_depth

经过上述运转成果咱们能够看出,关于该问题的猜测功能,调理随机区分与最优区分对测验功能的影响相差不大;而关于决策树的深度来说,因为咱们只给出了100个样本,所以理论上二叉树的最大深度为log2(100)=6.65,也便是深度为7之后就无法再进行区分了。标签14

Tags:

Add a Comment

电子邮件地址不会被公开。 必填项已用 *标注