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
Directorio de artículos
1. Utilice SK-Learn para crear un modelo de regresión logística
Para clasificación: sklearn.linear_model
.LogisticRegression
penalty
Mé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.tol
Criterio de tolerancia de parada: si no es Ninguno, detenga el entrenamiento en épocas consecutivas (pérdida > mejor_pérdida - tol). Predeterminado=1e-4.C
Recí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ónpenalty='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=True
este 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)