Aprendizaje automático: Resumen de aprendizaje de modelos lineales (2): Clasificación de regresión logística

Basado en el "Aprendizaje automático" del profesor Zhou Zhihua, las notas de estudio anteriores y otros materiales en Internet, resumiré esta parte del modelo lineal. Viene de: Aprendizaje automático: Resumen del aprendizaje de modelos lineales (1) .
Tiempo de estudio: 2022.04.18

1. Utilice SK-Learn para crear un modelo de regresión logística

Para clasificación: sklearn.linear_model.LogisticRegression

  • penaltyMétodo de regularización: el valor predeterminado es " l 2 l2l 2 ”。
    • Hay 2 l2l 2 ', 'l 1 l1l 1 ', 'red elástica red elásticaHay tres tipos de ela s t i c n e t ', correspondientes a la regresión de cresta, la regresión de Lasso y la regresión elástica respectivamente .
  • l1_ratio: Parámetro de regresión elástica, [0,1]. OK l 2 l2l 2 'y'l 1 l1l 1 ' ratio r, utilizado sólo si se trata de una "red elástica". Predeterminado=Ninguno.
  • tolCriterio de tolerancia de parada: si no es Ninguno, detenga el entrenamiento en épocas consecutivas (pérdida > mejor_pérdida - tol). Predeterminado=1e-4.
  • CRecíproco de la fuerza de la regularización: al igual que con las máquinas de vectores de soporte, los valores más pequeños especifican una regularización más fuerte. predeterminado = 1.0.
  • solver: Algoritmos para problemas de optimización. {'newton-cg', 'lbfgs', 'liblinear', 'sag', 'saga'}, default='lbfgs'.
    • ‘newton-cg’: También es miembro de la familia de métodos de Newton y utiliza la matriz derivada de segundo orden de la función de pérdida, la matriz de Hesse, para optimizar iterativamente la función de pérdida.
    • ‘lbfgs’: Un tipo de método cuasi-Newton que utiliza la matriz derivada de segundo orden de la función de pérdida, la matriz de Hesse, para optimizar iterativamente la función de pérdida.
    • ‘liblinear’: No admite configuración penalty='none'; regularización L1, utilizada principalmente para clasificación binaria.
    • ‘sag’: Requiere que los datos sean escalados. Admite regularización L2. El descenso de gradiente promedio estocástico es una variante del método de descenso de gradiente.
    • ‘saga’: Requiere que los datos sean escalados. Soporta L1, L2 y regularización elástica.
  • max_iter: Número máximo de iteraciones, predeterminado = 100.
  • multi_class: Tipo de taxonomía, predeterminado='auto'.
    • ‘auto’: Juicio automático.
    • ‘ovr’: Cada etiqueta se trata como un problema de clasificación binaria.
    • ‘multinomial’: Algoritmo Softmax, clasificación múltiple, incluso si los datos son de clasificación binaria , la pérdida mínima es una pérdida polinómica para ajustarse a toda la distribución de probabilidad. ('multinomial' no está disponible cuando solver ='liblinear').
from sklearn.model_selection import GridSearchCV
from sklearn.linear_model import LogisticRegression

logitReg = LogisticRegression()
params = [
    {
    
    'penalty': ['l2'], 'C': [0.1, 0.08, 0.12], 'solver': ['lbfgs'],
     'max_iter': [1000, 2000], 'multi_class': ['auto', 'multinomial']},
    {
    
    'penalty': ['l1', 'l2'], 'C': [0.1, 0.08, 0.12], 'solver': ['saga'],
     'max_iter': [1000, 2000], 'multi_class': ['auto', 'multinomial']},
    {
    
    'penalty': ['elasticnet'], 'l1_ratio': [0.1, 0.11, 0.12], 'C': [0.1, 0.08, 0.12], 'solver': ['saga'],
     'max_iter': [1000, 2000], 'multi_class': ['auto', 'multinomial']}
]  # 根据所要搜索的模型,调整需要搜索的参数
scores = ['accuracy', 'f1']
best_logitReg = GridSearchCV(logitReg, param_grid=params, n_jobs=-1, scoring=scores, refit='f1', error_score='raise')

# 进行网格搜索
best_logitReg.fit(train_x, train_y)
# 将最优模型传入fare_SGD
logitReg = best_logitReg.best_estimator_

logitReg.fit(train_x, train_y)
train_result = logitReg.predict(train_x)

2. Utilice SK-Learn para evaluar modelos de regresión

2.1 Simplemente llame a la función Classification_report

sklearn.metrics.informe_clasificación

Posibles parámetros:

  • y_true: matriz unidimensional, etiquetas de clasificación de datos reales.
  • y_pred: matriz unidimensional, etiqueta de clasificación predicha por el modelo.
  • etiquetas = Ninguno: Lista, nombres de etiquetas que se evaluarán.
  • target_names=Ninguno: Lista, especifique el nombre de la etiqueta (tantas categorías como etiquetas hay)
  • sample_weight=Ninguno: matriz unidimensional, el peso de diferentes puntos de datos en los resultados de la evaluación.
  • dígitos = 2: el número de dígitos decimales retenidos en el informe de evaluación. Si output_dict=Trueeste parámetro no tiene ningún efecto, el valor devuelto no se procesará.
  • output_dict=False: si es verdadero, el resultado de la evaluación se devuelve en forma de diccionario.
  • zero_division='warn': establece el valor que se devolverá al dividir por cero. Si se establece en "advertir", esto representa 0 pero también generará una advertencia.
print(classification_report(y_true, y_pred, digits=6))

2.2 Funciones de compilación para uso por lotes

O intente crear una plantilla usted mismo que pueda generar indicadores de evaluación relevantes en lotes:

def classification_evaluation(y_true, y_pred):

    # 输出准确率
    accuracy = accuracy_score(y_true, y_pred)

    # 得到混淆矩阵
    matrix = confusion_matrix(y_true, y_pred)

    # 输出精度:
    precision = precision_score(y_true, y_pred)
    # 输出宏平均 精确率
    macro_precision = metrics.precision_score(y_true, y_pred, average='macro')

    # 输出召回率:
    recall = recall_score(y_true, y_pred)
    # 输出宏平均 召回率
    macro_recall = metrics.recall_score(y_true, y_pred, average='macro')

    # fl_score
    f1 = f1_score(y_true, y_pred)
    # 输出宏平均 fl_score
    macro_f1 = metrics.f1_score(y_true, y_pred, average='weighted')

    # ROC-AUC分数
    roc_auc = roc_auc_score(y_true, y_pred)

3. Código completo

El conjunto de datos todavía utiliza el conjunto de entrenamiento de Spaceship Titanic.

import pandas as pd
from Data_processing_by_Pandas import mango_processing
from Classification_Model_evaluation import classification_evaluation
from Classification_Model_evaluation import plot_confusion_matrix
from Classification_Model_evaluation import plot_curve

# 读取数据
train = pd.read_csv('Titanic.csv')
print(train.describe())

train_target = train['Transported']
train_feature_before = train.drop(['PassengerId', 'Cabin', 'Name', 'Transported'], axis=1)

# 进行数据处理
train_feature = mango_processing(train_feature_before)

# 划分训练集与测试集
from sklearn.model_selection import train_test_split
train_x, test_x, train_y, test_y = train_test_split(train_feature, train_target, test_size=0.2, random_state=42)

# 引入网格搜索,找到最优模型
from sklearn.model_selection import GridSearchCV
from sklearn.linear_model import LogisticRegression

logitReg = LogisticRegression()

params = [
    {
    
    'penalty': ['l2'], 'C': [0.05, 0.08, 0.03], 'solver': ['lbfgs'],
     'max_iter': [1000, 800], 'multi_class': ['auto', 'multinomial']},
    {
    
    'penalty': ['l1'], 'C': [0.05, 0.08, 0.03], 'solver': ['liblinear'],
     'max_iter': [1000, 800], 'multi_class': ['auto']},
    {
    
    'penalty': ['l2'], 'C': [0.05, 0.08, 0.03], 'solver': ['sag'],
     'max_iter': [1000, 800], 'multi_class': ['auto', 'multinomial']}
]  # 根据所要搜索的模型,调整需要搜索的参数
scores = ['accuracy', 'f1']
best_logitReg = GridSearchCV(logitReg, param_grid=params, n_jobs=-1, scoring=scores, refit='f1', error_score='raise')

# 进行网格搜索
best_logitReg.fit(train_x, train_y)

# 得到相关参数:
print(best_logitReg.best_score_)
print(best_logitReg.best_params_)

# 将最优模型传入模型
logitReg = best_logitReg.best_estimator_
# 训练模型
logitReg.fit(train_x, train_y)
# 模型预测
train_result = logitReg.predict(train_x)

# 应用自己设置的评价函数输出
labels = ['False', 'True']
# 训练集结果评价
plot_confusion_matrix(classification_evaluation(train_y, train_result), labels)
plot_curve(train_y, train_result)

# 测试集结果评价
test_result = logitReg.predict(test_x)
plot_confusion_matrix(classification_evaluation(test_y, test_result), labels)
plot_curve(test_y, test_result)

Supongo que te gusta

Origin blog.csdn.net/Morganfs/article/details/124251740
Recomendado
Clasificación