Compartir tecnología

modelo de regresión lineal

2024-07-12

한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina

regresión lineal

1. Parte teórica

regresión lineal: En datos limitados, al ajustar los parámetros, se ajusta una línea recta y esta línea recta (modelo) se utiliza para realizar experimentos con datos desconocidos.predecir

Derechoforma general
y = w × x + by = w por x + by=el×X+b
El estado de toda la línea recta está dado por w y bw y belybDecidir, eneldeterminar la rectapendiente(es decir, el ángulo de inclinación), cama y desayunobDeterminar la línea recta en el eje Y.interceptar(Controla la traslación hacia arriba y hacia abajo de una línea recta, también conocida comoinclinación ).Por lo tanto, sólo necesitamos calcular enely cama y desayunobEl valor de puede determinar una línea recta específica. A continuación, estudiaremos cómo encontrarla. enely cama y desayunob

Insertar descripción de la imagen aquí

La influencia de w y b en la forma de la línea recta.

nombre propio

sustantivoDefinición
Conjunto de entrenamientoConjunto de datos utilizado para entrenar el modelo.
equipo de pruebaConjunto de datos utilizado para probar la calidad del modelo.
Muestra de entrenamiento/Punto de entrenamiento (Muestra de entrenamiento)Cada elemento de datos en el conjunto de entrenamiento.
CaracterísticasLa entrada de datos en el modelo puede ser valores numéricos, etiquetas de categorías, valores de píxeles de imágenes, etc.
Etiqueta El modelo necesita predecir el valor objetivo. Para problemas de clasificación, la etiqueta suele ser el nombre de la clase; para problemas de regresión, la etiqueta es un valor continuo.

1. Regresión lineal univariada

1) Preprocesamiento de datos

Estudiemos primero la regresión lineal univariada. La llamada regresión lineal univariada se refiere a una función lineal con una sola variable independiente, como por ejemplo: y = w ⋅ x + b = wcdot x + by=elX+bEso esLínea recta univariante, tiene sólo una variable de entrada xxX . Esta recta se puede expresar en un plano bidimensional (el eje horizontal es X y el eje vertical es Y).

Cuando obtenemos un conjunto de datos no divididos, generalmente dividimos los datos en un conjunto de entrenamiento y un conjunto de prueba. Un método de división simple es: tomar el primer 80% de las muestras como conjunto de entrenamiento y el 20% restante como conjunto de entrenamiento. el conjunto de prueba.

2) Definir la función de costos

Supongamos que hemos descubierto enely cama y desayunobEntonces hemos determinado una línea recta y podemos usar esta línea recta para hacer predicciones para facilitar el juicio del valor que predecimos.con valor realyentreerrorCuánto queremos definir *"una regla"*, utilizada para medir el valor predicho y' y'ycon valor verdadero yyy error entre.Aquí usamoserror cuadrático mediodefinirfunción de costo

J ( w , b ) = 1 2 m ∑ i = 1 m ( fw , b ( x ( i ) ) − y ( i ) ) 2 J(w,b) = frac{1}{2m}sumalímites_{i = 1}^m(f_{w,b}(x^{(i)}) - y^{(i)})^2Yo(el,b)=2metroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetro1i=1metroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetro(Fel,b(X(i))y(i))2
Desmantelamiento de fórmulas

fw, b(x(i)) − y(i) f_{w,b}(x^{(i)}) - y^{(i)}Fel,b(X(i))y(i):en fw, b(x(i)) f_{w,b}(x^{(i)})Fel,b(X(i))representa el valor predicho usando el modelo entrenado, mientras que y ( i ) y^{(i)}y(i)Representa el resultado verdadero de cada muestra de entrenamiento, y la diferencia entre los dos representa el error entre el valor predicho por el modelo y el valor verdadero.

¿Por qué elevar al cuadrado el error?

En todos los conjuntos de muestras, cada error puede ser positivo o negativo, y habrá una cierta probabilidad de compensación durante el proceso de suma. Esto provocará que el error de cada elemento sea muy grande (como: -100, + 90, -25, +30), luego de resumir, se obtiene un valor pequeño (-5) y finalmente se obtiene un juicio incorrecto.

1 2 m fracción{1}{2m}2metroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetro1: Representa el promedio de la suma de todos los errores de datos (este promedio puede representar el error de todo el modelo en cierto sentido) y obtiene el error cuadrático medio.

¿Por qué dividir por 2?

Porque cuando se realiza el descenso de gradiente más adelante, la derivación dividirá el índice 2 en coeficientes, porque para una gran cantidad de datos, una constante tiene poco impacto en el modelo. Para introducir la fórmula de derivación, divídala por 2 de antemano. , para su posterior compensación.

Conociendo la función de costo, solo necesitamos encontrar formas de reducir el costo. Cuanto menor sea el costo, más cerca estará nuestro valor previsto del valor real.

Al observar la función de costo de error, podemos ver que la función de costo de error es una función cuadrática, es decir, unafunción convexa, una propiedad de la función convexa es:El punto extremo es el punto máximo. , dado que la función de costo es una función cuadrática que se abre hacia arriba (la fórmula se puede expandir y puede sentir intuitivamente que el coeficiente del término cuadrado es mayor que 0), la función convexa solo tiene un valor mínimo, y solo Necesito encontrar el El valor mínimo es el valor mínimo.Para la función de costo de error J ( w , b ) J(w,b)Yo(el,b) , su expansión de fórmula se puede escribir como:
J ( w , b ) = 1 2 m ∑ i = 1 m ( ( wx ( i ) + b ) − y ( i ) ) 2 J(w,b) = frac{1}{2m}sumalímites_{i = 1}^m((wx^{(i)}+b) - y^{(i)})^2Yo(el,b)=2metroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetro1i=1metroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetro((elX(i)+b)y(i))2
JJYoEl tamaño depende de los parámetros. enely cama y desayunob, que se puede resolver mediante descenso de gradiente. La forma de la función de costo es aproximadamente la siguiente:

Insertar descripción de la imagen aquí

3) descenso de gradiente

La idea del descenso en gradiente se ejecuta principalmente.Encuentra la derivada parcialmétodo, que está relacionado con la biologíavariables de controlEl método es muy similar, tal como: en el control cama y desayunobActualizar sin cambios enel(Visible cama y desayunobes una constante), fórmula: w ′ = w − α ∂ J ( w ) ∂ ww' = w - alfa frac{parcial J(w)}{parcial w}el=elαelYo(el) Indica que se ha actualizado en secuencia. enel,en alfaα representatasa de aprendizaje Se utiliza para representar el tamaño del paso, que también puede entenderse como la velocidad de descenso, ∂ J ( w ) ∂ w frac{parcial J(w)}{parcial w}elYo(el) expresa derecho enelBuscando la derivada parcial obtenemos W − JW - JYoYo(PesosYoy el precioYofunción) Una línea tangente en una función convexa, utilizada para representar el valor de función que disminuye más rápidodirección, el producto de los dos representaMueva un paso en la dirección donde el valor de la función disminuye más rápido .Esta distancia debe ajustarse según el conjunto de datos. alfaαSi es demasiado grande (el tamaño del paso es demasiado grande), provocará enelva directamente sobre el punto más bajo hasta el punto más alto en el otro lado, de modo que nunca se acerca al mínimo, si alfaαSi es demasiado pequeño (el tamaño del paso es demasiado pequeño), provocará enelSe vuelve cada vez más lento a medida que se acerca al mínimo, consumiendo costos computacionales.


tasa de aprendizaje ( alfaα) método de ajuste

  1. Establece uno más pequeño primero alfaα Tales como: 0,001.

  2. Luego aumenta 10 veces cada vez, hasta un máximo de 1.

  3. Después de determinar un valor determinado, como por ejemplo: 0,01.

  4. Luego realice 3 veces el procesamiento, como por ejemplo: 0,01 × 3 = 0,03, 0,03 × 3 = 0,09 0,01 por 3 = 0,03, 0,03 por 3 = 0,090.01×3=0.03,0.03×3=0.09 (El propósito de esto es hacer que la convergencia sea más rápida).


El proceso de resolver derivadas parciales (encontrar la dirección del descenso del gradiente):

  • mendigar ∂ J ( w ) ∂ w frac{parcial J(w)}{parcial w}elYo(el) :

    ∂ J ( w ) ∂ w frac{parcial J(w)}{parcial w}elYo(el) = ∂ ∂ w 1 2 m ∑ i = 1 m ( fw , b ( x ( i ) ) − y ( i ) ) 2 frac{parcial}{parcial w}frac{1}{2m}sumalímites_{i = 1}^{m}(f_{w,b}(x^{(i)}) - y^{(i)})^2el2metroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetro1i=1metroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetro(Fel,b(X(i))y(i))2

    ​ = ∂ ∂ w 1 2 m ∑ i = 1 mwx ( i ) − y ( i ) ) 2 frac{parcial}{parcial w}frac{1}{2m}sumalímites_{i = 1}^{m}wx^{(i)} - y^{(i)})^2el2metroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetro1i=1metroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroelX(i)y(i))2

    ​ = 1 2 m ∑ i = 1 m ( fw , b ( x ( i ) ) − y ( i ) ) ⋅ 2 x ( i ) frac{1}{2m}sumalímites_{i = 1}^{m}(f_{w,b}(x^{(i)}) - y^{(i)})cdot2x^{(i)}2metroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetro1i=1metroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetro(Fel,b(X(i))y(i))2X(i)

    ​ = 1 m ∑ i = 1 m ( fw , b ( x ( i ) ) − y ( i ) ) x ( i ) frac{1}{m}sumalímites_{i = 1}^{m}(f_{w,b}(x^{(i)}) - y^{(i)})x^{(i)}metroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetro1i=1metroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetro(Fel,b(X(i))y(i))X(i)

  • mendigar ∂ J ( w ) ∂ b frac{parcial J(w)}{parcial b}bYo(el) :

    ∂ J ( w ) ∂ b frac{parcial J(w)}{parcial b}bYo(el) = ∂ ∂ b 1 2 m ∑ i = 1 m ( fw , b ( x ( i ) ) − y ( i ) ) 2 frac{parcial}{parcial b}frac{1}{2m}sumalímites_{i = 1}^{m}(f_{w,b}(x^{(i)}) - y^{(i)})^2b2metroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetro1i=1metroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetro(Fel,b(X(i))y(i))2

    ​ = ∂ ∂ b 1 2 m ∑ i = 1 mwx ( i ) − y ( i ) ) 2 frac{parcial}{parcial b}frac{1}{2m}sumalímites_{i = 1}^{m}wx^{(i)} - y^{(i)})^2b2metroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetro1i=1metroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroelX(i)y(i))2

    = 1 2 m ∑ i = 1 m ( fw , b ( x ( i ) ) − y ( i ) ) ⋅ 2 frac{1}{2m}sumalímites_{i = 1}^{m}(f_{w,b}(x^{(i)}) - y^{(i)})cdot22metroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetro1i=1metroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetro(Fel,b(X(i))y(i))2

    ​ = 1 m ∑ i = 1 m ( fw , b ( x ( i ) ) − y ( i ) ) frac{1}{m}sumalímites_{i = 1}^{m}(f_{w,b}(x^{(i)}) - y^{(i)})metroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetro1i=1metroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetro(Fel,b(X(i))y(i))

Encuentre algunos específicos mediante la iteración del bucle enelvalor con cama y desayunobvalor:

mientras ( ): mientras():elHolayomi():

w ∗ = w − α ∂ ∂ w J ( w , b ) w^* = w - alfa frac{parcial}{parcial w}J(w,b)el=elαelYo(el,b)

b ∗ = b − α ∂ ∂ b J ( w , b ) b^* = b - alfa frac{parcial}{parcial b}J(w,b)b=bαbYo(el,b)

y = y ∗ y = y^*el=el

b = b ∗ b = b^*b=b

Al principio, valoramos aleatoriamente w y b, y luego iteramos. Podemos configurar el descenso del gradiente para que salga cuando el error es menor que un cierto umbral, o personalizar el número de iteraciones a través de pasos limitados, podemos obtener un resultado más ideal. enelsuma de valor cama y desayunobvalor.

2. Regresión lineal multivariable

La regresión lineal multivariable expande las dimensiones a tres dimensiones e incluso a estados multidimensionales, como y = w 1 x 1 + w 2 x 2 + b = w_1 x_1 + w_2 x_2 + by=el1X1+el2X2+b puede entenderse comoXEje yYLos ejes son x 1 y x 2 x_1 y x_2X1yX2 OEl eje es yyyEste es un estado tridimensional. Cada muestra de entrenamiento es un punto en el espacio tridimensional. Es necesario encontrar una línea recta adecuada que se ajuste al punto de muestra en el espacio tridimensional.

Método: Para cada variable por separado ( w 1 , w 2 , … , wn , b w_1,w_2,puntos,w_n,bel1,el2,,elnorteorteorteorteorteorteorteorte,b) para el procesamiento de descenso de gradiente

Puntos principales: Para la regresión lineal multivariable, los rangos de valores de diferentes valores de características son diferentes, como: el rango de valores de la característica de edad: 0 0 0 ~ 100 100 100, área que cubre: 0 m2 0 m20metroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetro2 ~ 10000 m2 10000m210000metroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetro2 , también puede haberMuestra extraña, la existencia de datos de muestra singulares hará que el tiempo de entrenamiento aumente y también puede provocar una falla en la convergencia. Por lo tanto, cuando hay datos de muestra singulares, es necesario preprocesar los datos antes del entrenamiento.Normalizado ; Por el contrario, cuando no hay datos de muestra singulares, no es necesario realizar la normalización.Para abordar este problema, debemos realizarLas características están escaladas (normalizadas)

1) Preprocesamiento de datos

Procesamiento de normalización de datos.

lograrNormalización de datosHay tres métodos:

  1. Igual que dividir por el valor máximo:

    Todos los valores de cada característica se dividen por el valor máximo de esa característica.

  2. Normalización media:

    Reste el valor de cada característica del valor de esa característicasignificary luego dividido por la diferencia entre los valores máximo y mínimo de la característica.

  3. Normalización de puntuación Z:

    Calcula cada característicaDesviación Estándarysignificar

    Reste el valor de cada característica de todos los valores de esa característicavalor promedioy luego dividido por la característicasignificar

Si no se realiza la normalización, la función de costo cambiará debido a grandes diferencias en los valores de diferentes características en el vector de características. "departamento" .De esta manera, al realizar el descenso de gradiente, la dirección del gradiente se desviará de la dirección del valor mínimo y aumentará mucho.desvío, lo que hará que el tiempo de entrenamiento sea demasiado largo.

Después de la normalización, la función objetivo mostrará una comparación. "redondo", de modo que la velocidad de entrenamiento se acelera mucho y se evitan muchos desvíos.

Beneficios de la normalización de datos:

  1. Después de la normalizaciónAcelera el descenso del gradiente para encontrar la solución óptima., es decir, acelerar la convergencia de la red de formación.
  2. La normalización tiene el potencial de mejorar la precisión.
2) Función de costo (igual que la función de costo de la regresión lineal univariada)

J ( w , b ) = 1 2 m ∑ i = 1 m ( fw , b ( x ( i ) ) − y ( i ) ) 2 J(w,b) = frac{1}{2m}sumalímites_{i = 1}^m(f_{w,b}(x^{(i)}) - y^{(i)})^2Yo(el,b)=2metroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetro1i=1metroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetro(Fel,b(X(i))y(i))2

3) descenso de gradiente

Descenso de gradiente para regresión lineal múltiple

w 1 = W 1 − α 1 m ∑ i = 1 m ( fw ⃗ , bx ⃗ ( i ) − y ( i ) ) x 1 ( i ) w_1 = W_1 - alfa frac{1}{m}sumlimits_{i = 1}^{m}(f_{vec{w},b}vec{x}^{(i)} - y^{(i)})x_1^{(i)}el1=Yo1αmetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetro1i=1metroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetro(Fel ,bX (i)y(i))X1(i)

⋮ vpuntos

wn = W n − α 1 m ∑ i = 1 m ( fw ⃗ , bx ⃗ ( i ) − y ( i ) ) xn ( i ) w_n = W_n - alfa frac{1}{m}sumlimits_{i = 1}^{m}(f_{vec{w},b}vec{x}^{(i)} - y^{(i)})x_n^{(i)}elnorteorteorteorteorteorteorteorte=Yonorteorteorteorteorteorteorteorteαmetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetro1i=1metroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetro(Fel ,bX (i)y(i))Xnorteorteorteorteorteorteorteorte(i)

b = b − α 1 m ∑ i = 1 m ( fw ⃗ , bx ⃗ ( i ) − y ( i ) ) b = b - alfa frac{1}{m}sumlimits_{i = 1}^{m}(f_{vec{w},b}vec{x}^{(i)} - y^{(i)})b=bαmetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetro1i=1metroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetro(Fel ,bX (i)y(i))

explicar: w 1 ⋯ wn w_1cpuntos w_nel1elnorteorteorteorteorteorteorteorte representa el coeficiente de cada variable y b representa el término constante de la función lineal.

3.Ecuación normal

1) Preprocesamiento de datos

Omitir...

2) función de costo

Derivación matemática:

J = 1 2 m ∑ i = 1 m ( θ ⃗ ix ⃗ i − yi ) 2 J = frac{1}{2m}sumalímites_{i = 1}^{m}(vec{theta}_i vec{x}_i - y_i)^2Yo=2metroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetro1i=1metroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetro(θ iX iyi)2

​ = 1 2 m ∣ ∣ θ ⃗ x ⃗ − y ∣ ∣ 2 frac{1}{2m}||vec{theta} vec{x} - y||^22metroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetro1∣∣θ X y2

​ = 1 2 m ( θ ⃗ x ⃗ − y ) T ( θ ⃗ x ⃗ − y ) frac{1}{2m}(vec{theta} vec{x} - y)^T(vec{theta} vec{x} - y)2metroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetro1(θ X y)yo(θ X y)

​ = 1 2 m ( θ ⃗ T x ⃗ T − y T ) ( θ ⃗ x ⃗ − y ) frac{1}{2m}(vec{theta}^T vec{x}^T - y^T)(vec{theta} vec{x} - y)2metroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetro1(θ yoX yoyyo)(θ X y)

​ = 1 2 m ( θ ⃗ T x ⃗ T x ⃗ θ ⃗ − y T x ⃗ θ ⃗ − θ ⃗ T x ⃗ T y + y T y ) frac{1}{2m}(vec{theta}^T vec{x}^T vec{x} vec{theta} - y^T vec{x} vec{theta} -vec{theta}^T vec{x}^Ty +y^Ty )2metroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetro1(θ yoX yoX θ yyoX θ θ yoX yoy+yyoy)

3) descenso de gradiente

bien θ-thetaθEncuentra la derivada parcial: Δ = ∂ J ∂ θ = 1 2 m ( ∂ θ ⃗ T x ⃗ T x ⃗ θ ⃗ ∂ θ − ∂ y T x ⃗ θ ⃗ ∂ θ − ∂ θ ⃗ T x ⃗ T y ∂ θ + y T y ∂ θ ) Delta =frac{parcial J}{parcial theta}= frac{1}{2m}(frac{parcial vec{theta}^T vec{x}^Tvec{x}vec{theta}}{parcial theta} - frac{parcial y^Tvec{x}vec{theta}}{parcial theta} - frac{parcial vec{theta}^Tvec{x}^Ty}{parcial theta} + frac{y^Ty}{theta parcial})Δ=θYo=2metroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetro1(θθ yoX yoX θ θyyoX θ θθ yoX yoy+θyyoy)

Regla de derivación de matrices:

  1. ∂ θ TA θ ∂ θ = ( A + AT ) θ frac{theta parcial^{T}Atheta}{theta parcial} = (A + A^T)thetaθθyoAθ=(A+Ayo)θ

  2. ∂ XTA ∂ X = A frac{X parcial^{T}A}{X parcial} = AXXyoA=A

  3. ∂ AX ∂ X = AT frac{AX parcial}{X parcial} = A^TXAX=Ayo

  4. ∂ A ∂ X = 0 frac{parcial A}{parcial X} = 0XA=0

Disponible Δ = 1 2 m ( ∂ θ ⃗ T x ⃗ T x ⃗ θ ⃗ ∂ θ − ∂ y T x ⃗ θ ⃗ ∂ θ − ∂ θ ⃗ T x ⃗ T y ∂ θ + y T y ∂ θ ) = 1 2 m ⋅ ( 2 x T x θ − 2 x T y ) = 1 m ⋅ ( x T x θ − x T y ) Delta = frac{1}{2m}(frac{parcial vec{theta}^T vec{x}^Tvec{x}vec{theta}}{parcial theta} - frac{parcial y^Tvec{x}vec{theta}}{parcial theta} - frac{vec parcial{theta}^Tvec{x}^Ty}{theta parcial} + frac{y^Ty}{theta parcial}) = frac{1}{2m}cdot (2x^Txtheta - 2x^Ty) = frac{1}{m} cdot (x^Txtheta - x^Ty)Δ=2metroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetro1(θθ yoX yoX θ θyyoX θ θθ yoX yoy+θyyoy)=2metroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetro1(2XyoXθ2Xyoy)=metroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetroetro1(XyoXθXyoy)
cuando Δ = 0 Delta = 0Δ=0 hora: x T x θ = x T y x^Tx theta = x^TyXyoXθ=Xyoy , θ = ( x T x ) − 1 x T y theta = (x^Tx)^{-1}x^Tyθ=(XyoX)1Xyoy se puede calcular θ-thetaθ valor.

Comparación de descenso de gradiente y ecuaciones normales

  • descenso de gradiente: Es necesario seleccionar la tasa de aprendizaje α, que requiere múltiples iteraciones. También se puede aplicar mejor cuando el número de características n es grande y es adecuado para varios tipos de modelos.

  • ecuación normal: No es necesario seleccionar la tasa de aprendizaje α. Se calcula una vez y debe calcularse. (xTx) − 1 (x^Tx)^{-1}(XyoX)1 , si el número de características nnnorteorteorteorteorteorteorteorteSi es mayor, el costo de operación será mayor, porque la complejidad del tiempo de cálculo de la matriz inversa es O ( n 3 ) O(n^3)Oh(norteorteorteorteorteorteorteorte3) , generalmente cuando nnnorteorteorteorteorteorteorteorteSigue siendo aceptable cuando es inferior a 10.000.Sólo disponible para modelos lineales., no apto para otros modelos, como los modelos de regresión logística.

4.Regresión polinomial

Dado que en algunos casos es difícil que las líneas rectas se ajusten a todos los datos, se necesitan curvas para ajustar los datos, como modelos cuadráticos, modelos cúbicos, etc.

En general, la función de regresión de los datos es desconocida. Incluso si se conoce, es difícil transformarla en un modelo lineal con una simple transformación de función, por lo que el enfoque común es.regresión polinómica(Regresión polinómica), es decir, utilizar una función polinómica para ajustar los datos.

Cómo elegir el grado de un polinomio

Hay muchos tipos de funciones polinomiales. En términos generales, primero debes observar la forma de los datos y luego decidir qué forma de función polinomial usar para resolver el problema. Por ejemplo, en el diagrama de dispersión de los datos, si hay un "doblar ", puedes considerar usar un polinomio cuadrático (es decir, elevar al cuadrado las características); hay dos "doblar ", puedes considerar usar un polinomio cúbico (tomando la potencia cúbica de la característica); hay tres "doblar ”, luego considere usar un polinomio de cuarto orden (tomando la cuarta potencia de la característica), y así sucesivamente.

Aunque la función de regresión real no es necesariamente un polinomio de cierto grado, siempre que el ajuste sea bueno, es factible utilizar un polinomio apropiado para aproximar la función de regresión real.

2. Parte experimental

El apéndice al final del artículo contiene todos los datos originales utilizados en el experimento.ex1data1.txtes la relación entre población y beneficio, ex1data2.txtEs el impacto del tamaño de la casa y el número de dormitorios en el precio de la casa.

1. Regresión lineal univariada

1) Cargar datos
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
path = "ex1data1.txt"
data = pd.read_csv(path,header = None,names=['Population','Profit'])
data.head()   # 预览数据
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

Insertar descripción de la imagen aquí

2) Ver datos
data.describe()    # 更加详细的数据描述
  • 1

Insertar descripción de la imagen aquí

# 可视化训练数据
data.plot(kind = 'scatter',x = 'Population',y = 'Profit',figsize = (12,8))
plt.show()
  • 1
  • 2
  • 3

Insertar descripción de la imagen aquí

3) Definir la función de costos
def computerCost(X,y,theta):    # 定义代价函数
    inner = np.power(((X*theta.T)-y),2)   # theta.T表示theta的转置
    return np.sum(inner)/(2*len(X))
  • 1
  • 2
  • 3
data.insert(0,"One",1)  # 表示在第0列前面插入一列数,其表头为One,其值为1
  • 1

Insertar en la primera columna del conjunto de datos. 1 1 1La función esFacilita los cálculos matriciales., cuando se multiplican matrices, intervienen pesos enely prejuicio cama y desayunob,porque cama y desayunobno se multiplica por la variable, por lo que 1 1 1, usado con cama y desayunobMultiplicar.

4) Dividir los datos
cols = data.shape[1]
X = data.iloc[:,0:cols - 1]  #“,”前只有“:”,表示所有的行,“,”后表示抽取数据中第[0列~第cols-1列)(左闭右开),去掉最后一列,最后一列为预测值

y = data.iloc[:,cols - 1:cols]  #只取最后一列的值,表示预测值

  • 1
  • 2
  • 3
  • 4
  • 5
X.head()
  • 1

Insertar descripción de la imagen aquí

y.head()
  • 1

Insertar descripción de la imagen aquí

X = np.matrix(X.values)
y = np.matrix(y.values)  #只将表格中的值装换为矩阵而不是包括序号与标题

#初始化theta
theta = np.matrix(np.array([0,0]))  #先是一个一维的数据,然后在转换为一个二维的矩阵
  • 1
  • 2
  • 3
  • 4
  • 5
5) Parámetros de inicialización
theta  
# => matrix([[0, 0]])
  • 1
  • 2
X.shape,theta.shape,y.shape  # 此时theta为一行列,需要进行转置
# => ((97, 2), (1, 2), (97, 1))
  • 1
  • 2
computerCost(X,y,theta)
# => 32.072733877455676
  • 1
  • 2
6) Definir la función de descenso de gradiente.
def gradientDecent(X,y,theta,alpha,iters):   #iters为迭代次数
    temp = np.matrix(np.zeros(theta.shape))   #构造一个与theta大小一样的零矩阵,用于存储更新后的theta
    parmaters = int (theta.ravel().shape[1])    #.ravel()的功能是将多维数组降至一维,用于求需要求的参数个数
    cost = np.zeros(iters)   #构建iters个0的数组,相当于对每次迭代的cost进行记录
    
    for i in range(iters):
        error = (X * theta.T - y)     #记录误差值,结果为一个数组
        for j in range(parmaters):    #对每一个参数进行更新,j用于表示每一个参数
            term = np.multiply(error,X[:,j])   #.multiply 是对矩阵当中的数对应相乘,这里表示与X矩阵的第j列相乘。
            temp[0,j] = theta[0,j] - ((alpha/len(X))*np.sum(term))  #存储更行后的theta的值,.sum()表示将矩阵中的数进行求和
        
        theta = temp      #更新theta
        cost[i] = computerCost(X,y,theta)  #计算此时的代价,并记录在cost中。
    return theta,cost
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
7) Inicializar hiperparámetros
alpha  = 0.01		# 学习率
iters = 1000		# 迭代次数
  • 1
  • 2
8) descenso de gradiente
g,cost = gradientDecent(X,y,theta,alpha,iters)
g
# => matrix([[-3.24140214,  1.1272942 ]])
  • 1
  • 2
  • 3
9) Calcula el costo
computerCost(X,y,g)
# => 4.515955503078914
  • 1
  • 2
10) Dibujar modelo lineal
x = np.linspace(data.Population.min(),data.Population.max(),100) #抽取100个样本  (从data数据集中的最小值到最大值之间抽取100个样本)
f = g[0,0] + (g[0,1] * x)  #f = ax + b

fig,ax = plt.subplots(figsize = (12,8))    #figsize表示图的大小
ax.plot(x,f,'r',label = "Prediction")    #绘制直线,横坐标,纵坐标,直线名称
ax.scatter(data.Population,data.Profit,label = 'Training data')   #绘制点,横坐标,纵坐标,点的名称
ax.legend(loc = 4)  #显示图例位置
ax.set_xlabel('Population')  #设置x轴的名称
ax.set_ylabel('Profit')   #设置y轴的名称
ax.set_title('Predicted Profit vs. Population Size')  #设置标题的名称
plt.show()
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

Insertar descripción de la imagen aquí

11) Dibuja la curva de cambio de costos.
fig,ax = plt.subplots(figsize = (12,8))
ax.plot(np.arange(iters),cost,'r')
ax.set_xlabel('Interations')
ax.set_ylabel('Cost')
ax.set_title("Error vs. Training Epoc")
plt.show()
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

Insertar descripción de la imagen aquí

2. Regresión lineal multivariable

1) Cargar datos
path = "ex1data2.txt"
data2 = pd.read_csv(path,header = None,names=["Size","Bedroom","Price"])
data2.head()
  • 1
  • 2
  • 3

Insertar descripción de la imagen aquí

2) Procesamiento de normalización de datos
data2 = (data2 - data2.mean())/data2.std()
data2.head()
  • 1
  • 2

Insertar descripción de la imagen aquí

3) Dividir los datos
data2.insert(0,'Ones',1)  #在x的第一列插入1

clos = data2.shape[1]   #存储第二维(列)的数据量
X2 = data2.iloc[:,0:clos-1]  #对X2进行赋值
y2 = data2.iloc[:,clos-1:clos]  #对y2进行赋值

X2 = np.matrix(X2.values)  #将X2转为矩阵
y2 = np.matrix(y2.values)  #将y2转为矩阵
theta2 = np.matrix(np.array([0,0,0]))  #初始化theta2为0矩阵
computerCost(X2, y2, theta2)
# => 0.48936170212765967
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
4) descenso de gradiente
g2,cost2 = gradientDecent(X2,y2,theta2,alpha,iters)   #记录放回值g2(theta2)和cost2
g2
# => matrix([[-1.10868761e-16,  8.78503652e-01, -4.69166570e-02]])
  • 1
  • 2
  • 3
5) Calcula el costo
computerCost(X2,y2,g2)
# => 0.13070336960771892
  • 1
  • 2
6) Dibuja la curva de cambio de costos.
fig,ax = plt.subplots(figsize = (12,8))
ax.plot(np.arange(iters),cost2,'x')
ax.set_xlabel('Iterations')
ax.set_ylabel('Cost')
ax.set_title('Error vs. Training Epoch')
plt.show()
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

Por favor agregue la descripción de la imagen.

3. Ecuación normal

#正规方程
def normalEqn(X,y):
    theta = np.linalg.inv(X.T@X)@X.T@y   #.linalg中包含线性代数中的函数,求矩阵的逆(inv)、特征值等。@表示矩阵相乘
    return theta
  • 1
  • 2
  • 3
  • 4
final_theta2 = normalEqn(X,y)
final_theta2
# => matrix([[-3.89578088], [ 1.19303364]])
  • 1
  • 2
  • 3

3. Resumen

Pasos generales para entrenar un modelo.

  1. Preprocesamiento de datos.
  2. Elija un modelo según su problema específico.
  3. Establezca la función de costo.
  4. Utilice un algoritmo de descenso de gradiente para encontrar los parámetros óptimos.
  5. Evaluar el modelo y ajustar los hiperparámetros.
  6. Utilice modelos para hacer predicciones.

4. Apéndice

1. ex1data1.txt

6.1101,17.592
5.5277,9.1302
8.5186,13.662
7.0032,11.854
5.8598,6.8233
8.3829,11.886
7.4764,4.3483
8.5781,12
6.4862,6.5987
5.0546,3.8166
5.7107,3.2522
14.164,15.505
5.734,3.1551
8.4084,7.2258
5.6407,0.71618
5.3794,3.5129
6.3654,5.3048
5.1301,0.56077
6.4296,3.6518
7.0708,5.3893
6.1891,3.1386
20.27,21.767
5.4901,4.263
6.3261,5.1875
5.5649,3.0825
18.945,22.638
12.828,13.501
10.957,7.0467
13.176,14.692
22.203,24.147
5.2524,-1.22
6.5894,5.9966
9.2482,12.134
5.8918,1.8495
8.2111,6.5426
7.9334,4.5623
8.0959,4.1164
5.6063,3.3928
12.836,10.117
6.3534,5.4974
5.4069,0.55657
6.8825,3.9115
11.708,5.3854
5.7737,2.4406
7.8247,6.7318
7.0931,1.0463
5.0702,5.1337
5.8014,1.844
11.7,8.0043
5.5416,1.0179
7.5402,6.7504
5.3077,1.8396
7.4239,4.2885
7.6031,4.9981
6.3328,1.4233
6.3589,-1.4211
6.2742,2.4756
5.6397,4.6042
9.3102,3.9624
9.4536,5.4141
8.8254,5.1694
5.1793,-0.74279
21.279,17.929
14.908,12.054
18.959,17.054
7.2182,4.8852
8.2951,5.7442
10.236,7.7754
5.4994,1.0173
20.341,20.992
10.136,6.6799
7.3345,4.0259
6.0062,1.2784
7.2259,3.3411
5.0269,-2.6807
6.5479,0.29678
7.5386,3.8845
5.0365,5.7014
10.274,6.7526
5.1077,2.0576
5.7292,0.47953
5.1884,0.20421
6.3557,0.67861
9.7687,7.5435
6.5159,5.3436
8.5172,4.2415
9.1802,6.7981
6.002,0.92695
5.5204,0.152
5.0594,2.8214
5.7077,1.8451
7.6366,4.2959
5.8707,7.2029
5.3054,1.9869
8.2934,0.14454
13.394,9.0551
5.4369,0.61705
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
  • 74
  • 75
  • 76
  • 77
  • 78
  • 79
  • 80
  • 81
  • 82
  • 83
  • 84
  • 85
  • 86
  • 87
  • 88
  • 89
  • 90
  • 91
  • 92
  • 93
  • 94
  • 95
  • 96
  • 97

2. ex1data2.txt

2104,3,399900
1600,3,329900
2400,3,369000
1416,2,232000
3000,4,539900
1985,4,299900
1534,3,314900
1427,3,198999
1380,3,212000
1494,3,242500
1940,4,239999
2000,3,347000
1890,3,329999
4478,5,699900
1268,3,259900
2300,4,449900
1320,2,299900
1236,3,199900
2609,4,499998
3031,4,599000
1767,3,252900
1888,2,255000
1604,3,242900
1962,4,259900
3890,3,573900
1100,3,249900
1458,3,464500
2526,3,469000
2200,3,475000
2637,3,299900
1839,2,349900
1000,1,169900
2040,4,314900
3137,3,579900
1811,4,285900
1437,3,249900
1239,3,229900
2132,4,345000
4215,4,549000
2162,4,287000
1664,2,368500
2238,3,329900
2567,4,314000
1200,3,299000
852,2,179900
1852,4,299900
1203,3,239500
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47