Regressão de regressão de aprendizado de máquina

Este artigo é apenas meu entendimento, corrija-me se houver desvios e erros

Regressão: a regressão é a primeira a propor um modelo experimental, mas os parâmetros-chave do modelo são desconhecidos. Uma grande quantidade de dados é usada para encontrar o modelo experimental que melhor corresponda aos dados de teste, ou seja, para encontrar os parâmetros-chave de o modelo. Em seguida, use um exemplo da palestra de Li Hongyi. Veja especificamente o que é regressão

Este é um exemplo muito interessante para avaliar a habilidade de combate (CP) do Pokémon após a evolução

Ele contém alguns outros atributos, Xcp, Xs, Xhp, Xw, Xh, etc.

A primeira etapa é determinar um modelo (modelo). Aqui, um modelo linear é determinado . Também pode ser expresso que b, w são parâmetros e podem ser quaisquer dados, Xi são vários atributos de Pokémon, w pode ser entendido como peso, eb pode ser entendido é o desvio.

O segundo passo é determinar quais dessas funções são boas, na verdade, é determinar b, w, primeiro coletar os dados de evolução do Pokémon,

Abaixo estão os 10 dados coletados (parecendo tão poucos) e seus gráficos bidimensionais de dados antes e depois da evolução. Parece algo a se aprender na teoria da probabilidade? Na verdade, é encontrar uma linha reta para fazer isso. aponta o máximo possível. Está próximo, o método dos mínimos quadrados é usado;

Use o método dos mínimos quadrados para resolver b, w; use a função de perda L, na verdade, é o erro quadrático médio, quanto menor melhor; a solução b, w é L

O processo de minimização é chamado de estimativa dos parâmetros do método dos mínimos quadrados do modelo de regressão linear;

Cada ponto na figura representa uma função do modelo, a cor representa o erro quadrático médio, o azul representa o bom e o vermelho representa o ruim

O terceiro passo é selecionar a melhor função, que é o valor mínimo de L, que usa derivação diferencial.O método usado aqui é o método de gradiente descendente.

Gradiente descendente: aqui primeiro calculamos em uma dimensão, há apenas um w desconhecido

1. Selecione aleatoriamente um ponto inicial

2. Calcule a derivada. Se for um número negativo, aumente o valor de w, se for um número positivo, diminua w. Na verdade, isso determina a direção do declínio. Isso é chamado de taxa de aprendizado. Quanto wi aumenta ou diminuições depende da derivada e da taxa de aprendizagem.

Então pegue o segundo ponto

3. Repita a segunda etapa para encontrar ótica local,

Na verdade, todos estão muito intrigados com o fato de que apenas o ótimo local pode ser encontrado dessa forma.Na verdade, não existe um ótimo local neste modelo.

Sob dois parâmetros: derivadas parciais são usadas, e os outros são basicamente iguais a um parâmetro. Veja por si mesmo (haha). Também não há ótimo local sob dois parâmetros;

Esta é uma ilustração das etapas para resolver o problema

 

Então eu encontrei este modelo: Calcular a taxa de erro média , essa é a soma da distância vertical entre a amostra e a linha reta; estamos mais preocupados com a taxa de erro média do teste, a taxa de erro média do teste é um pouco maior do que a taxa de erro média, devemos Como fazer melhor:

A primeira: usando a forma quadrática, o efeito é obviamente melhor do que o da primeira vez, e precisamos fazer melhor, usamos a terceira potência, a quarta potência e a quinta potência:

Não é difícil descobrir que os resultados do treinamento estão ficando cada vez melhores, mas os resultados do quarto e do quinto testes pioraram, e há resultados irracionais na quinta potência e aparecem números negativos. Na verdade, isso é um ajuste excessivo .

 

Mencionamos acima que coletamos poucos dados. Agora coletamos muitos dados: não é difícil descobrir que nosso trabalho acima parece ser em vão. Não é uma relação linear simples. Também podemos descobrir que sua distribuição é também relacionado aos seus tipos. Está relacionado, o que significa que olharmos apenas para um de seus atributos (cp) não é suficiente:

Temos outra forma de processamento, utilizando a seguinte estrutura linear:

De acordo com 0 e 1, as seguintes equações são úteis para a compreensão

Encontrar o modelo a seguir não é difícil de descobrir que o efeito é melhor do que o anterior, mas ainda existem pontos acima e abaixo da linha reta que temos que considerar outros atributos:

Podemos preencher todos os atributos em que pensamos, mas descobrimos que o efeito do treinamento é bom e o efeito do teste é muito ruim. Usamos outro método para ajustar:

Quanto menor for o wi, melhor, o que torna o resultado mais suave, que é um determinado número.

Este é o resultado do experimento: veja se você consegue entender, estou com preguiça de escrever

################# Deixe-me mostrar o código #############################################################################################################

Este é o código adicionado mais tarde

##李弘毅线性回归模型demo
#y_data = b + w*x_data

import matplotlib.pyplot as plt
from matplotlib.colors import ListedColormap
import  numpy as np

x_data = [338.,333.,328.,207.,226.,25.,179.,60.,208.,606.]
y_data = [640.,633.,619.,393.,428.,27.,193.,66.,226.,1591.]

b = -120
w = -4
lr = 1##学习率//这个是添加lr_b,lr_w之后随意设置的

iteration = 100000###迭代次数
##求值过程之中b,w的保存用于画图
b_history = [b]
w_history = [w]
############添加lr_b,lr_w效果更好一些,这涉及到一个方法以后会写
lr_b = 0.0
lr_w = 0.0
############
for i in range(iteration):
    ##偏导
    b_grad = 0.0;
    w_grad = 0.0;

    for n in range(len(x_data)):
        b_grad = b_grad-2.0*(y_data[n]-b-w*x_data[n])*1.0
        w_grad = w_grad-2.0*(y_data[n]-b-w*x_data[n])*x_data[n]
#################################
    lr_b = lr_b + b_grad ** 2
    lr_w = lr_w + w_grad ** 2
################################
##更新b,w的值  b0->b1 w0->w1
    b = b - lr/(np.sqrt(lr_b))*b_grad
    w = w - lr/(np.sqrt(lr_w))*w_grad
##将数据保存,用于画图
    b_history.append(b)
    w_history.append(w)
    
#################作图准备工作########################
x = np.arange(-200,-100,1)##bias
y = np.arange(-5,5,0.1)##weight
Z =np.zeros((len(x),len(y)))
X,Y = np.meshgrid(x,y)
for i in range(len(x)):
    for j in range(len(y)):
        b= x[i]
        w = y[j]
        Z[j][i] = 0
        for n in range(len(x_data)):
            Z[j][i]  = Z[j][i] + (y_data[n] -b -w*x_data[n])**2
        Z[j][i] = Z[j][i]/len(x_data)
###########################作图###########################
plt.contourf(x,y,Z,50,alpha=0.5,cmap=plt.get_cmap('jet'))
plt.plot([-188.4],[2.67],'x',ms=12,markeredgewidth=3,color='orange')
plt.plot(b_history,w_history,'o-',ms=3,lw=1.5,color='black')
plt.xlim(-200,-100)
plt.ylim(-5,5)
plt.xlabel(r'$b$',fontsize=16)
plt.ylabel(r'$w$',fontsize=16)
plt.show()

Imagem do efeito:

Acho que você gosta

Origin blog.csdn.net/DALAOS/article/details/86511620
Recomendado
Clasificación