[Classificação SkLearn, algoritmo de regressão] Árvore de regressão DecisionTreeRegressor



Á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 ,
      Insira a descrição da imagem aqui
      em que N是样本数量, 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:
      Insira a descrição da imagem aqui
      em que u是残差平方和(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、 scoreo núcleo.

De volta ao topo


② 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.
Insira a descrição da imagem aqui
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    ])

De volta ao topo


③ 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()

Insira a descrição da imagem aqui

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

Insira a descrição da imagem aqui

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

Insira a descrição da imagem aqui

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的模型而言虽然整体趋势相似,但是存在过拟合.
    Insira a descrição da imagem aqui
    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.

De volta ao topo


Acho que você gosta

Origin blog.csdn.net/qq_45797116/article/details/113547952
Recomendado
Clasificación