Un simple ajuste lineal problema, al final cómo muchos tipos de prácticas

Un simple ajuste lineal problema, al final cómo muchos tipos de prácticas

Creo que hemos hecho un problema de ajuste lineal, de hecho, es dar una gran cantidad de puntos para encontrar la pendiente y la intersección de la ecuación lineal. Ya en matemáticas de secundaria tienen este tipo de problema, recuerdo muy claramente, si aparece en los periódicos, por lo general se produce en torno a las preguntas segunda pregunta de respuesta de la escuela secundaria en el enfoque es el método de mínimos cuadrados, en la fórmula, encontrar la pendiente y la intersección, para ser agradable, que es enviar subtemas.

En la informática científica, también se utiliza oles análisis de regresión (OLS). OLS significa mínimos cuadrados ordinarios, análisis de regresión (análisis de regresión) la forma más fundamental.

estudio en profundidad

Este es el inicio del estudio a fondo de la demo de tres marco.

(1) Hardware

La estructura de datos del núcleo es la manera en modelo Keras, una capa de red de la organización. El modelo más simple es un orden secuencial modelo, que las capas se apilan por una pluralidad de redes lineales.

import keras
import numpy as np
import matplotlib.pyplot as plt
%matplotlib inline
from pylab import mpl
#正常显示画图时出现的中文
mpl.rcParams['font.sans-serif']=['SimHei']
from keras import layers

x = np.linspace(0,50,50)
y  =  3 * x + 7 + np.random.randn(50) *5 
plt.scatter(x,y)

Por azar dibujado 50 diagrama de dispersión numpy como se muestra a continuación

Utilizar los siguientes Keras construir el modelo secuencial secuencial más sencilla

# 顺序模型
model = keras.Sequential() 
# 输入输出是一维特征
model.add(layers.Dense(1,input_dim=1)) 
model.summary()
# 编译模型 
# 使用adam优化器,损失函数mse均方差,在compile加入精确度
model.compile(optimizer='adam',loss='mse',metrics=['acc'])
# 训练模型 epochs 参数是把数据训练3000遍
history = model.fit(x, y, epochs=3000)
plt.scatter(x, y, c='r')
plt.plot(x, model.predict(x))

Ejecutar resultados se muestran en la figura el código.

(2) Pytorch

Creamos una por la ecuación y = 2 X + 0.2 y = 2x + 0.2 conjuntos de datos generados portorch.rand()hacer función de ruido

import torch as t
from matplotlib import pyplot as plt
from torch.autograd import Variable
from torch import nn
# 创建数据集
x = Variable(t.unsqueeze(t.linspace(-1, 1, 100), dim=1))
y = Variable(x * 2 + 0.2 + t.rand(x.size()))
plt.scatter(x.data.numpy(),y.data.numpy())
plt.show()

conjunto de datos producidos, como se muestra en la figura.

Vamos a empezar la definición del modelo, definido aquí tienen sólo una unidimensional modelo de entrada y salida capas y definir la función de optimización MSE función de pérdida y SGD, como se usa en este documento, la función de la pérdida media del error cuadrado.

class LinearRegression(t.nn.Module):
    def __init__(self):
        #继承父类构造函数
        super(LinearRegression, self).__init__() 
        #输入和输出的维度都是1
        self.linear = t.nn.Linear(1, 1) 
    def forward(self, x):
        out = self.linear(x)
        return out
        
model = LinearRegression()#实例化对象
num_epochs = 1000#迭代次数
learning_rate = 1e-2#学习率0.01
Loss = t.nn.MSELoss()#损失函数
optimizer = t.optim.SGD(model.parameters(), lr=learning_rate)#优化函数

Atravesando se calcula cada época, Pérdida, calcula un gradiente de propagación hacia atrás, un gradiente continuamente actualizada, utilizando una optimización de descenso de gradiente.

for epoch in range(num_epochs):
    # 预测
    y_pred= model(x)
    # 计算loss
    loss = Loss(y_pred, y)
    #清空上一步参数值
    optimizer.zero_grad()
    #反向传播
    loss.backward()
    #更新参数
    optimizer.step()
    if epoch % 200 == 0:
        print("[{}/{}] loss:{:.4f}".format(epoch+1, num_epochs, loss))

plt.scatter(x.data.numpy(), y.data.numpy())
plt.plot(x.data.numpy(), y_pred.data.numpy(), 'r-',lw=5)
plt.text(0.5, 0,'Loss=%.4f' % loss.data.item(), fontdict={'size': 20, 'color':  'red'})
plt.show()
####结果如下####
[1/1000] loss:1.7766
[201/1000] loss:0.1699
[401/1000] loss:0.0816
[601/1000] loss:0.0759
[801/1000] loss:0.0755

Ejecutar resultados se muestran en la figura el código.

(3) tensorflow

Aquí, nosotros usamos un ajuste lineal tensorflow

En primer lugar los datos, que hemos generado, etiquetas de datos mediante la adición de ruido gaussiano para obtener la función real.

Entonces con el fin de calcular el gradiente, y w define un desplazamiento variable B, los valores iniciales se ponen a 0.

import tensorflow as tf
import numpy as np

# 一些参数
learning_rate = 0.01  # 学习率
training_steps = 1000  # 训练次数
display_step = 50  # 训练50次输出一次

# 训练数据
X = np.linspace(0, 1, 50).reshape((-1,1))
Y =  2* X+ 1 + np.random.normal(0,0.1, X.shape)

n_samples = 50

# 随机初始化权重和偏置
W = tf.Variable(np.random.randn(), name="weight")
b = tf.Variable(np.random.randn(), name="bias")

# 线性回归函数
def linear_regression(x):
    return W*x + b

# 损失函数
def mean_square(y_pred, y_true):
    return tf.reduce_sum(tf.pow(y_pred-y_true, 2)) / (2 * n_samples)

# 优化器采用随机梯度下降(SGD)
optimizer = tf.optimizers.SGD(learning_rate)

# 计算梯度,更新参数
def run_optimization():
    # tf.GradientTape()梯度带,可以查看每一次epoch的参数值
    with tf.GradientTape() as g:
        pred = linear_regression(X)
        loss = mean_square(pred, Y)
    # 计算梯度
    gradients = g.gradient(loss, [W, b])
    # 更新W,b
    optimizer.apply_gradients(zip(gradients, [W, b]))

# 开始训练
for step in range(1, training_steps+1):
    run_optimization()
    if step % display_step == 0:
        pred = linear_regression(X)
        loss = mean_square(pred, Y)
        print("step: %i, loss: %f, W: %f, b: %f" % (step, loss, W.numpy(), b.numpy()))

import matplotlib.pyplot as plt
plt.plot(X, Y, 'ro', label='Original data')
plt.plot(X, np.array(W * X + b), label='Fitted line')
plt.legend()
plt.show()

Lo anterior es un enfoque de aprendizaje profundo, verá un me cegó para demostrar el siguiente enfoque de aprendizaje automático

aprendizaje Automático

import numpy as np
import matplotlib.pyplot as plt
%matplotlib inline
x = np.linspace(0,30,50)
y = x+ 2*np.random.rand(50) 
plt.figure(figsize=(10,8))
from sklearn.linear_model import LinearRegression  #导入线性回归
model = LinearRegression()  #初始化模型
x1 = x.reshape(-1,1)   # 将行变列  得到x坐标
y1 = y.reshape(-1,1)   # 将行变列  得到y坐标
model.fit(x1,y1)  #训练数据
plt.scatter(x,y)
x_test = np.linspace(0,40).reshape(-1,1)
plt.plot(x_test,model.predict(x_test))
model.coef_   #array([[1.00116024]])   斜率
model.intercept_   # array([0.86175551])  截距

numpy

import numpy as np
x = np.linspace(0,30,50)
y = x+ 1 + np.random.normal(0,0.1, 50)
z1 = np.polyfit(x,y,1) #一次多项式拟合,相当于线性拟合
z1 # [1.00895356, 0.71872268]
p1 = np.poly1d(z1)  
p1 # array([1.00032794, 0.9799152 ])

scipy

from scipy.stats  import  linregress
x = np.linspace(0,30,50)
y = x + 2 +np.random.normal(0)
slope, intercept, r_value, p_value, std_err = linregress(x, y)
print("slope: %f    intercept: %f" % (slope, intercept)) # slope: 1.000000    intercept: 1.692957
print("R-squared: %f" % r_value**2) #R-squared: 1.000000
plt.figure(figsize=(10,8))
plt.plot(x, y, 'o', label='original data')
plt.plot(x, intercept + slope*x, 'r', label='fitted line')
plt.legend()
plt.show()

Modelos de estado

#  线性模型
import statsmodels.api as sm
import numpy as np
x = np.linspace(0,10,100)
y = 3*x + np.random.randn()+ 10
# Fit and summarize OLS model
X = sm.add_constant(x)
mod = sm.OLS(y,X)
result = mod.fit()
print(result.params)
print(result.summary())
[9.65615842 3.        ]


  OLS Regression Results                            
==============================================================================
Dep. Variable:                      y   R-squared:                       1.000
Model:                            OLS   Adj. R-squared:                  1.000
Method:                 Least Squares   F-statistic:                 7.546e+31
Date:                Thu, 25 Jul 2019   Prob (F-statistic):               0.00
Time:                        21:10:18   Log-Likelihood:                 3082.0
No. Observations:                 100   AIC:                            -6160.
Df Residuals:                      98   BIC:                            -6155.
Df Model:                           1                                         
Covariance Type:            nonrobust                                         
==============================================================================
                 coef    std err          t      P>|t|      [0.025      0.975]
------------------------------------------------------------------------------
const          9.6562      2e-15   4.83e+15      0.000       9.656       9.656
x1             3.0000   3.45e-16   8.69e+15      0.000       3.000       3.000
==============================================================================
Omnibus:                        4.067   Durbin-Watson:                   0.161
Prob(Omnibus):                  0.131   Jarque-Bera (JB):                4.001
Skew:                           0.446   Prob(JB):                        0.135
Kurtosis:                       2.593   Cond. No.                         11.7
==============================================================================

R

idioma R por lm()la creación de un modelo de regresión lineal la relación entre las variables de predicción y la función de respuesta. Lo siguiente son mis notas de la parte posterior en peso y altura

> x <- c(151, 174, 138, 186, 128, 136, 179, 163, 152, 131)
> y <- c(63, 81, 56, 91, 47, 57, 76, 72, 62, 48)
> lm(y~x)
Call:
lm(formula = y ~ x)

Coefficients:
(Intercept)            x  
   -38.4551       0.6746  
> summary(lm(y~x))

Call:
lm(formula = y ~ x)

Residuals:
    Min      1Q  Median      3Q     Max 
-6.3002 -1.6629  0.0412  1.8944  3.9775 

Coefficients:
             Estimate Std. Error t value Pr(>|t|)    
(Intercept) -38.45509    8.04901  -4.778  0.00139 ** 
x             0.67461    0.05191  12.997 1.16e-06 ***
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 3.253 on 8 degrees of freedom
Multiple R-squared:  0.9548,	Adjusted R-squared:  0.9491 
F-statistic: 168.9 on 1 and 8 DF,  p-value: 1.164e-06

lm(y~x)Devuelve el origen y la pendiente, es decir, la ecuación de regresión lineal del peso y altura: y = 0.6746x -38.4551

SPSS

SPSS puede hacer análisis de regresión.

Fuentes de datos

Seleccione [Análisis] en la barra de menú, seleccione el menú desplegable [volver], el lado derecho del menú emergente, seleccione [sub] San lineal, regresión lineal ventana emergente, "colesterol" variable a la derecha de la variable dependiente [cuadro] en [] argumento cuadro de "tiempo" variable de selección a la derecha de las variables dependientes e independientes, como se muestra en la figura.

TEP1: Seleccione [Análisis] en la barra de menú, seleccione [] en el modelo lineal general multivariante seleccionar [], la ventana pop-up "multivariable" en el desplegable menú, la "altura", opt-in a la derecha [variable dependiente "peso" ] caja, la "clase" se selecciona entre el [factor de] caja se fija, como se muestra en la figura.

Paso 2: Haga clic en [] en [post hoc multivariable: compara el promedio de la medida después] ventana, "clase" opt-in para la prueba poste derecho [en] y seleccione [Figura] grupo, haga clic en [Continuar], como se muestra a continuación Fig.

Stata

SPSS salió, dejaré Stata?

. set obs 10
number of observations (_N) was 0, now 10
. gen x=_n
. gen y= x+runiform()
. list
     +---------------+
     |  x          y |
     |---------------|
  1. |  1   1.348872 |
  2. |  2   2.266886 |
  3. |  3   3.136646 |
  4. |  4   4.028557 |
  5. |  5   5.868933 |
     |---------------|
  6. |  6   6.350855 |
  7. |  7   7.071105 |
  8. |  8   8.323368 |
  9. |  9   9.555103 |
 10. | 10   10.87599 |
     +---------------+

. reg y x

      Source |       SS           df       MS      Number of obs   =        10
-------------+----------------------------------   F(1, 8)         =   1107.40
       Model |  89.9664664         1  89.9664664   Prob > F        =    0.0000
    Residual |  .649928434         8  .081241054   R-squared       =    0.9928
-------------+----------------------------------   Adj R-squared   =    0.9919
       Total |  90.6163949         9  10.0684883   Root MSE        =    .28503

------------------------------------------------------------------------------
           y |      Coef.   Std. Err.      t    P>|t|     [95% Conf. Interval]
-------------+----------------------------------------------------------------
           x |   1.044271   .0313806    33.28   0.000     .9719076    1.116635
       _cons |   .1391392   .1947113     0.71   0.495    -.3098658    .5881443
------------------------------------------------------------------------------

En la pantalla de resultados, Coef 1.044271 expresa como pendiente de la regresión, _cons es 0,1391392 que muestra la intersección de regresión, R-cuadrado y Adj R cuadrado de 0,9928 y 0,9919, respectivamente, lo que indica un buen ajuste de la ecuación de regresión efecto.

Si necesitamos para dibujar un patrón correspondiente, sólo tendrá que utilizar el comando avplotspuede Diagrama de línea, como se muestra a continuación.

Sobresalir

De hecho, el más fácil de lograr este análisis de regresión, por supuesto, Excel

Ahora falta la huelga cuando el número de precios alcanzó para obtener el máximo beneficio. CTRL + E sólo tiene que seleccionar todos los datos, seleccione Insertar XY y las líneas dibujadas con un suave marcas gráfico de dispersión. Haga clic ejes, a la derecha, seleccione Opciones del eje, establecer los límites mínimo y máximo. Haga clic en un gráfico de dispersión, añadir líneas de tendencia. En la opción de línea de tendencia, una exponencial, lineal, logarítmica, polinomio, y exponenciación selecciona regresión de media móvil, como se muestra a continuación.

Mientras hace clic en Mostrar fórmula y el valor R cuadrado, constantemente cambiando las opciones de regresión del valor cercano R cuadrado a 1, es decir, cuanto mayor sea el grado de ajuste. Aquí seleccione polinomio de segundo orden. ecuación DETALLADA: y = -4.6716x2 + 286.75x - 2988.4, R $ ² $ = 0,9201, como se muestra en la figura.

Hay powerbi también puede hacer análisis de regresión.

resumen

Un simple ajuste lineal por tanto como una docena práctica, ¿cuál elegiría en virtud del cual, desde luego elija Excel, 20 Miao llegar.

Si hay una demanda para un ajuste lineal a los datos, algunos analistas corrieron inmediatamente DL, pasado una escapada por la tarde, no sé con Excel, SPSS, 20 segundos para conseguir un poco de punto, sino también su buena.

Herramienta, para seleccionar arma. Recuerdo un anuncio dice: ¿cómo no a las horas extraordinarias para completar cientos de copias de la fusión por informes Python Excel, no se aprende Python.

Yo sólo quiero decir: a aprender Excel hacer?

Hacemos clic en la pestaña debajo de la [datos] → [Nueva consulta del Archivo] → [de] carpeta, como se muestra a continuación:

A continuación, introduzca PowerQuery interfaz de obtener al instante, ¿por qué debe escribir código Python?

Otro ejemplo es el factor común y análisis de componentes principales, Excel está trabajando, y luego se apresuró a hacer con el factor de Python y análisis de componentes principales, que tiene que hacer?

SPSS, Stata análisis factorial es una cosa buena

Como otro ejemplo, antes de hacer series de tiempo, los resultados que fueron con Keras rollback tres meses, comienzan a escribir código, pero no saben los resultados de Stata utiliza con frecuencia puede hacer series de tiempo, de repente se siente estúpida y una pérdida de tiempo

En Stata en casi todos los modelos de máquinas tienen.

Cuando se abre el bloc de notas jupyter, se puede pensar en Excel no puede manejar, por ejemplo, un cambio en el número, cambie directamente en Excel canto, pretende pandas de importación.

Al hacer el análisis de datos, por favor, no golpee el código, porque no hay necesidad, excel, powerbi, SPSS, Stata absolutamente lo puede hacer, pero golpeando el código son maestros, de hecho, creo que es simplemente desean participar en una compleja "maestro".

Maestro por favor no me aerosol, sé que eres muy poderoso!

Publicados 824 artículos originales · ganado elogios 268 · vistas 280 000 +

Supongo que te gusta

Origin blog.csdn.net/weixin_44510615/article/details/105271700
Recomendado
Clasificación