Artigo Diretório
Árvore de regressão de DecisionTreeRegressor
class sklearn.tree.DecisionTreeClassifier (criterion=’gini’, splitter=’best’, max_depth=None,
min_samples_split=2, min_samples_leaf=1, min_weight_fraction_leaf=0.0, max_features=None,
random_state=None, max_leaf_nodes=None, min_impurity_decrease=0.0, min_impurity_split=None,
presort=False)
Quase todos os parâmetros, atributos e interfaces são exatamente iguais à árvore de classificação. Deve-se observar que na árvore de regressão, não há dúvida se a distribuição do rótulo é balanceada, portanto, não há parâmetro como class_weight.
① Parâmetros, atributos e interfaces importantes
-
A árvore de regressão mede a qualidade dos ramos. Existem três padrões suportados:
-
1) Insira "
mse
" usando a均方误差mean squared error(MSE)
diferença entre o erro quadrático médio, o nó pai do nó folha e será usado como uma seleção de recurso padrão, por este método usando o valor médio do nó folha para minimizar a perda de L2 ,
em queN是样本数量
,i是每一个数据样本
,fi是模型回归出的数值
,yi是样本点i实际的数值标签
. e entaoA essência do MSE é a diferença entre os dados reais da amostra e o resultado da regressão. Na árvore de regressão, o MSE não é apenas o nosso indicador de medição da qualidade do ramo, mas também o nosso indicador mais comumente usado para medir a qualidade da regressão da árvore de regressão. Quando estamos usando validação cruzada ou outros métodos para obter os resultados da árvore de regressão , muitas vezes escolhemos a média O erro quadrado é usado como nossa avaliação (na árvore de classificação, este indicador é a precisão da previsão representada pela pontuação). No retorno, buscamos que quanto menor o MSE, melhor. No entanto,回归树的接口 score返回的是R²,并不是MSE
. R-quadrado é definido como se segue:
em queu是残差平方和(MSE*N)
,v是总平方和
,N是样本数量
,i是每一个数据样本
,fi是模型回归出的数值
,yi是样本点i实际的数值标签
.y帽是真实数值标签的平均数
. R-quadrado pode ser positivo ou negativo (se a soma dos quadrados residuais do modelo for muito maior do que a soma total dos quadrados do modelo, o modelo é muito ruim, R-quadrado será negativo), e o erro quadrático médio será sempre positivo .
★ É importante mencionar que embora o erro quadrático médio seja sempre positivo, quando o erro quadrático médio é usado como o critério em sklearn, o erro quadrático médio negativo "(neg mean_squared_error) é calculado. Isso ocorre porque quando sklearn calcula a avaliação do modelo índice, irá Considerando a natureza do próprio indicador, o erro quadrático médio em si é um erro, por isso é classificado como uma perda do modelo por sklearn. Portanto, em sklearn, é expresso como um número negativo. O valor de o verdadeiro erro quadrático médio MSE é na verdade neg meanquared_error remove o número negativo. -
2) Insira "
friedman mse
" Use费尔德曼均方误差
, este indicador usa o erro quadrático médio aprimorado de Friedman para problemas em ramos potenciais -
3) Insira "
mae
" Use绝对平均误差mae(mean absolute error)
, este indicador usa o valor mediano do nó folha para minimizar a perda de L1
-
-
O atributo mais importante ainda é
feature_importances_
, a interface ainda éapply、fit 、predict、 score
o núcleo.
② Validação cruzada
交叉验证是用来观察模型的稳定性的一种方法
, Dividimos os dados em n partes, usamos uma delas como o conjunto de teste e as outras n-1 partes como o conjunto de treinamento e calculamos a precisão do modelo várias vezes para avaliar a precisão média do modelo. A divisão do conjunto de treinamento e do conjunto de teste interferirá nos resultados do modelo, portanto, o valor médio obtido pelos resultados de n vezes de validação cruzada é uma medida melhor do efeito do modelo.
Veja a postagem do blog: Aprendizado de máquina | Validação cruzada
def cross_val_score(estimator, X, y=None, groups=None, scoring=None, cv=None,
n_jobs=None, verbose=0, fit_params=None,
pre_dispatch='2*n_jobs', error_score=np.nan):
estimator:估计方法对象(分类器) --- 训练的模型
X:数据特征(Features)
y:数据标签(Labels)
soring:调用方法(包括accuracy和mean_squared_error等等)
cv:几折交叉验证
n_jobs:同时工作的cpu个数(-1代表全部)
♦ Simples de usar
from sklearn.datasets import load_boston
from sklearn.model_selection import cross_val_score
from sklearn.tree import DecisionTreeRegressor
# 加载数据集
boston = load_boston()
x = boston.data
y = boston.target
# 构建模型
regressor = DecisionTreeRegressor(random_state=0)
# 交叉验证简单使用
cross_score = cross_val_score(regressor,x,y,cv=10,scoring="neg_mean_squared_error")
cross_score
交叉验证结果:
array([-16.41568627, -10.61843137, -18.30176471, -55.36803922,
-16.01470588, -44.70117647, -12.2148 , -91.3888 ,
-57.764 , -36.8134 ])
③ Exemplo: desenho de imagem de regressão unidimensional sinusoidal
Conjunto de dados de seno perfeito ideal
import numpy as np
from matplotlib import pyplot as plt
from sklearn.tree import DecisionTreeRegressor
# 生成随机种子
rng = np.random.RandomState(1)
# 利用随机种子始终生成相同的随机数 (0-5,80个)
# 生成的时候将其升维处理 ---- sklearn不支持一维数据
# 进行图像绘制时对x进行排序(从小往大开始绘图)
x = np.sort(5*rng.rand(80,1),axis=0)
# 理想正弦下的取值
# 绘图时作为value,应当转为一维数据
# ravel() 展开多维数组
y = np.sin(x).ravel()
plt.figure(figsize=(10,6))
plt.scatter(x,y,s=20,edgecolor='black',c='darkorange',label='data')
plt.show()
Adicionar ruído ao conjunto de dados
# 步长为5取出一个y值增加噪声
y[::5] += 3 * (0.5 - rng.rand(16))
# 再次绘图
plt.figure(figsize=(10,6))
plt.scatter(x,y,s=20,edgecolor='black',c='darkorange',label='data')
plt.show()
Ao adicionar ruído ao conjunto de dados, comparando as duas imagens, é óbvio que há uma distinção
Criar conjunto de teste
[:,np.newaxis]
Usado para aumentar a dimensão de uma matriz unidimensional
[np.newaxis,:]
Usado para aumentar a dimensão de uma matriz unidimensional e transpor
# 创建测试集
xtest = np.arange(0,5,0.01)[:,np.newaxis]
xtest
Faça previsões em ambos os modelos
- Use para
predict接口
fazer previsões
y_1 = regr_1.predict(xtest)
y_2 = regr_2.predict(xtest)
Desenho
# 绘图
plt.figure(figsize=(10,6))
plt.scatter(x,y,s=20,edgecolor='black',c='darkorange',label='data')
plt.plot(xtest,y_1,c='red',linestyle='-',linewidth=1.5)
plt.plot(xtest,y_2,c='green',linestyle='-.',linewidth=1.5)
plt.legend(['regr_1','regr_2','origin'])
plt.title('Decision Tree Regression')
plt.show()
- Pode-se ver na imagem que para
树深为2的模型而言整体拟合趋势是sin()函数
e para树深为5的模型而言虽然整体趋势相似,但是存在过拟合
.
Pode-se ver que a árvore de regressão aprende uma regressão linear local que se aproxima de uma curva seno. Podemos ver que se a profundidade máxima (由maxdepth参数控制
) da árvore for definida muito alta, a árvore de decisão aprende muito bem. Ela aprende muitos detalhes dos dados de treinamento, incluindo a apresentação de ruído, o que faz com que o modelo se desvie do verdadeiro curva sinusoidal e forma um encaixe.