aprendizaje automático de pyhton y regresión lineal de minería de datos

说明:
    此类文,只介绍常见机器学习的算法的实际应用,不对各算法原理做进一步理解,以后的机器学习的原理学习专在机器学习栏目进行展示,先学会怎么用吧,原理得慢慢来。
参考内容:
    python数据挖掘与机器学习实战.方魏.机械工业出版社.2019.05
    机器学习基础:从入门到求职.胡欢武.电子工业出版社.2019.03

El análisis de regresión es un método de análisis cuantitativo muy utilizado. Se utiliza para analizar la relación estadística entre las cosas, enfocándose en investigar la ley de los cambios cuantitativos entre variables, y describiendo y reflejando esta relación en forma de ecuaciones de regresión para ayudar a las personas a comprender con precisión el grado en que las variables se ven afectadas por una o más variables. , Y luego proporcionar una base científica para la predicción.在大数据分析中,回归分析是一种预测性的建模技术,它研究的是因变量(目标)和自变量(预测器)之间的关系。这种技术通常用于预测分析、时间序列模型,以及发现变量之间的因果关系。

Análisis de regresión lineal unaria

El concepto de regresión lineal.

En el análisis de regresión lineal, si solo hay una variable independiente y una variable dependiente, y la relación puede expresarse aproximadamente mediante una línea recta, se llama análisis de regresión lineal simple. Si se encuentra una alta correlación positiva entre la variable dependiente Y y la variable independiente X, se puede determinar una ecuación de línea recta para que todos los puntos de datos estén lo más cerca posible de la línea recta ajustada. El modelo de análisis de regresión lineal simple puede expresarse mediante la siguiente ecuación:Y=a+bx 其中,Y为因变量,a为截距,b为相关系数,x为自变量。

Ejemplos de regresión lineal.

Predecir los precios de la vivienda: Un ejemplo simple de regresión lineal es la cuestión de la predicción del valor de la vivienda. En términos generales, cuanto más grande es la casa, mayor es el valor de la casa. Se puede concluir que el valor de la casa está relacionado con el área de la casa. En este caso, el área de la casa es una variable independiente y el precio de la casa es una variable dependiente, por lo tanto, para predecir el precio de la casa, necesita encontrar una ecuación lineal que se ajuste al modelo Y = a + bx del conjunto de datos dado .

Conjunto de datos de área de vivienda prevista
# predict_house_price.py

# 1. 导入需要的包
from sklearn import datasets, linear_model
import matplotlib.pyplot as plt
import numpy as np
import pandas as pd

# 2. 读取数据函数
def get_data(file_name):
    data = pd.read_csv(file_name)
    x_parmeter = []
    y_parmeter = []
    for single_square_feet, single_price_value in zip(data['square_feet'],data['price']):
        # 遍历数据
        x_parmeter.append([float(single_square_feet)])
        y_parmeter.append([float(single_price_value)])
    return x_parmeter, y_parmeter

# 3. 将数据拟合到线性模型
def linear_model_main(X_parameters,Y_parmeters,predict_value):
    regr = linear_model.LinearRegression()
    regr.fit(X_parameters,Y_parmeters)
    # 训练模型
    predict_outcome = regr.predict(predict_value)
    predictions = {}
    predictions['intercept'] = regr.intercept_
    predictions['coefficient'] = regr.coef_
    predictions['predicted_value'] = predict_outcome
    return predictions

# 4. 绘制拟合曲线
def show_linear_line(X,Y):
    regr = linear_model.LinearRegression()
    regr.fit(X,Y)
    plt.scatter(X,Y,color='blue')
    plt.plot(X,regr.predict(X),color="red")
    plt.xticks()
    plt.yticks()
    plt.show()
    
# 读取数据、进行预测
X, Y = get_data('E:/Data/6/input_data.csv')
show_linear_line(X,Y)
predictvalue = 700
result = linear_model_main(X,Y,predictvalue)
print("系数a:", result['intercept'])
print("系数b:", result['coefficient'])
print("预测价格:", result['predicted_value'])

系数a: [1771.80851064]
系数b: [[28.77659574]]
预测价格: [[21915.42553191]]

El valor de intersección es el valor de a, y el valor del coeficiente es el valor de b. El valor del precio previsto es 21915.4255, esto significa que el trabajo de predecir el precio de la casa está hecho. Para verificar si los datos se ajustan a la regresión lineal, debe escribir una función, ingresar X_parameters e Y_parameters, y dibujar una línea recta para el ajuste de datos. Se puede ver en la figura que la línea recta básicamente puede ajustarse a todos los puntos de datos.

Análisis de regresión lineal múltiple

El concepto de regresión lineal múltiple.

El análisis de regresión lineal múltiple es una generalización del análisis de regresión lineal simple, que se refiere al análisis de regresión de múltiples variables dependientes en múltiples variables independientes. El más utilizado se limita a una variable dependiente, pero tiene múltiples variables independientes, también llamadas análisis de regresión múltiple. La forma general del análisis de regresión múltiple es la siguiente: Y = a + b 1 X 1 + b 2 X 2 + b 3 X 3 +… + b k X k (donde a representa la intersección, b 1 , b 2 , b 3 … b k es el coeficiente de regresión).

Ejemplos de hasta qué punto la regresión lineal

Inversión publicitaria: cuando existen múltiples factores que influyen en el valor del resultado, se puede utilizar un modelo de regresión lineal múltiple. Por ejemplo, las ventas de bienes pueden estar relacionadas con la publicidad televisiva, la publicidad por radio y la publicidad en periódicos. Por lo tanto:
Ventas = β 0 + β 1 TV + β 2 Radio + β 3 Periódico 

1. Leer en los datos

from sklearn import linear_model
import pandas

# 1.读入数据
data = pd.read_csv("E:/Data/6/Advertising.csv",header=0,index_col=0)
data 
TV Radio Periódico Ventas
1 230,1 37,8 69,2 22,1
2 44,5 39,3 45,1 10,4
3 17,2 45,9 69,3 9.3
4 4 151,5 41,3 58,5 18,5
5 5 180,8 10,8 58.4 12,9
... ... ... ... ...
196 38,2 3.7 13,8 7.6
197 94,2 4.9 8.1 9,7
198 177,0 9.3 6.4 12,8
199 283,6 42,0 66,2 25,5
200 232,1 8.6 8.7 13,4

200 filas × 4 columnas

Los datos anteriores tienen las siguientes características:

  • TV: costos de publicidad invertidos en TV (en millones de yuanes);
  • Radio: costos de publicidad invertidos en medios de difusión;
  • Periódico: costos publicitarios para medios de prensa;
  • Ventas: el volumen de ventas del producto correspondiente.
    En este caso, las ventas de productos se predicen a través de diferentes inversiones publicitarias. Debido a que la variable correspondiente es un valor continuo, este problema es un problema de regresión. Hay un total de 200 observaciones en el conjunto de datos, y cada grupo de observaciones corresponde a una situación de mercado.

2. Ver la relación entre datos

# 2. 通过可视化各个特征和观测值的关系
import matplotlib.pyplot as plt
import seaborn as sns

sns.pairplot(data, x_vars=['TV','Radio','Newspaper'],y_vars=['Sales'],size=7,kind='reg')
plt.show()

Se puede ver en la figura que las características de TV y las ventas tienen una relación lineal fuerte, mientras que Radio y Ventas tienen una relación lineal más débil, y Periódico y Ventas tienen una relación lineal más débil.

3. Construir vectores de características y etiquetas

# 3. 使用pandas构建X(特征向量)和y(标签)
'''
scikit-learn要求X是一个特征矩阵,y是一个NumPy向量。pandas构建在NumPy之上。
因此,X可以是pandas的DataFrame,y可以是pandas的Series,scikit-learn可以理解这种结构。
'''

# 创建特征列表
feature_cols = ['TV','Radio','Newspaper']

# 使用列表选择原始DataFrame的子集,构建特征向量
X = data[feature_cols]
X = data[['TV','Radio','Newspaper']]

# 从DataFrame中选择一个Series
y = data['Sales']
y = data.Sales

X
TV Radio Periódico
1 230,1 37,8 69,2
2 44,5 39,3 45,1
3 17,2 45,9 69,3
4 4 151,5 41,3 58,5
5 5 180,8 10,8 58.4
... ... ... ...
196 38,2 3.7 13,8
197 94,2 4.9 8.1
198 177,0 9.3 6.4
199 283,6 42,0 66,2
200 232,1 8.6 8.7

200 filas × 3 columnas

y
1      22.1
2      10.4
3       9.3
4      18.5
5      12.9
       ... 
196     7.6
197     9.7
198    12.8
199    25.5
200    13.4
Name: Sales, Length: 200, dtype: float64

4. Cree el conjunto de entrenamiento y el conjunto de prueba
Cree el conjunto de entrenamiento y el conjunto de prueba, guárdelo en X_train, y_train, Xtest y y_test respectivamente.

# 4.构建训练集和测试集
# 使用交叉验证
from sklearn.cross_validation import train_test_split

X_train, X_test, y_train, y_test = train_test_split(X, y) # 75% 用于训练 25%用于测试
print(X_train.shape)
print(y_train.shape)

print(X_test.shape)
print(y_test.shape)
(150, 3)
(150,)
(50, 3)
(50,)

5. Entrenamiento del modelo Para
usar sklearn para la regresión lineal, primero importe el modelo de regresión lineal relevante y luego realice la simulación de regresión lineal.

from sklearn.linear_model import LinearRegression

linreg = LinearRegression()
# 训练模型
model = linreg.fit(X_train,y_train)
print(model)
print(linreg.intercept_) # 截距
print(linreg.coef_)      # 系数
 
# 将特征名称和系数对应
zip(feature_cols,linreg.coef_) 

LinearRegression(copy_X=True, fit_intercept=True, n_jobs=1, normalize=False)
3.18324257719733
[0.04355291 0.19015449 0.00187221]
1

<zip at 0x1fcd01a5788>

Para la inversión publicitaria dada en Radio y Periódicos, si cada unidad adicional se invierte en publicidad televisiva, el volumen de ventas correspondiente aumentará en 0.04355 unidades. Es decir, la inversión publicitaria de los otros dos medios es fija: por cada US $ 1,000 adicionales en publicidad televisiva (porque la unidad es de US $ 1,000), las ventas aumentarán en 43.5 (porque la unidad es 1000). Del mismo modo, utilizando el método de la variable de control, se pueden analizar las otras dos variables.

6. Hacer predicciones
Después de obtener el modelo de regresión mediante simulación lineal, el modelo puede predecir los datos y la función de predicción puede obtener el resultado de la predicción.

y_pred = linreg.predict(X_test)
print(y_pred)

# 返回模型在测试集上的预测准确率
print("模型得分:",linreg.score(X_test,y_test))

[10.74391068 23.14564258  8.32679708 15.21951218 18.28945003 14.87833614
 13.7803107   7.63132692  8.92202965 11.01760334 12.53937187 14.68253695
 15.55290183 11.01469897 11.76553368 17.74441368 16.85875042  9.38817803
 20.61167465  4.771148   10.76013573 18.12281809 17.31568335 15.00207018
 16.24914813  8.14154239 18.41459647 21.86644162 21.18666811 16.48384668
 24.61985703 21.02422026 11.4813219  20.97928742 13.30921663  7.2209075
 15.33535201  7.60112899 12.52375857 16.99771224 12.79018816 11.62956032
 20.72425247 17.31572264 11.89161417  6.34236115 20.1308101  10.79413639
 17.74580942  9.98156724]
模型得分: 0.8631218575476306

7. Evaluación del modelo
Para problemas de clasificación, la medida de evaluación es la tasa de precisión, pero no es aplicable a los problemas de regresión.Aquí hay tres medidas de evaluación comúnmente utilizadas para la regresión lineal.

  • Error absoluto medio (MAE);
  • Error cuadrático medio (error cuadrático medio, MSE);
  • Error cuadrático medio (RMSE).
# 此处采用RMSE
from sklearn import metrics
import numpy as np

sum_mean = 0 
for i in range(len(y_pred)):
    sum_mean += (y_pred[i] - y_test.values[i])**2
    sum_error = np.sqrt(sum_mean / len(y_pred))
print("均方根为:", sum_error)
均方根为: 2.094615925156935
# 绘制预测和特测试集曲线
import matplotlib.pyplot as plt

def show_roc():   
    plt.figure()
    plt.plot(range(len(y_pred)), y_pred,'b',label = "predict")
    plt.plot(range(len(y_pred)), y_test,'r',label = "test")
    plt.legend(loc="upper right")
    plt.xlabel("The number of sales")
    plt.ylabel("Value of sales")
    plt.show()
    
show_roc()

Resumen

La introducción de la regresión lineal ordinaria es como se describió anteriormente, implementada en el scikit-learn a través de la clase linear_model.LinearRegression, a continuación se resumen los principales parámetros y métodos de esta clase.

  • Parámetro
    • fit_intercept: seleccione si desea calcular la constante de polarización b, el valor predeterminado es True, lo que significa cálculo.
    • normalizar: elija si desea normalizar los datos antes de ajustarlos. El valor predeterminado es Falso, lo que significa que no hay normalización.
    • n_jobs: especifique el número de núcleos de CPU cuando la computadora está trabajando en paralelo. El valor predeterminado es 1. Si selecciona -1, significa que se utilizan todos los núcleos de CPU disponibles.
  • Atributos
    • coef_: vector de peso w utilizado para generar el modelo de regresión lineal.
    • intercept_: utilizado para generar la constante de sesgo b del modelo de regresión lineal.
  • Método
    • fit (X_train, y_train): entrena el modelo en el conjunto de entrenamiento (X_train, y_train).
    • predecir (X): utilice el modelo entrenado para predecir el conjunto de datos X a predecir, y los datos devueltos son el resultado de predicción correspondiente al conjunto de predicciones.
    • puntaje (X_test, y_test): devuelve la precisión de predicción del modelo en el conjunto de prueba (X_test, y_test). La fórmula de cálculo se muestra a continuación. El puntaje es un valor menor que 1 o puede ser un valor negativo. Un valor mayor indica el rendimiento de predicción del modelo. Mejor

Supongo que te gusta

Origin www.cnblogs.com/sinlearn/p/12683168.html
Recomendado
Clasificación