0、前言:
- Logistic回归是解决分类问题的一种重要的机器学习算法模型
1、基本原理:
- Logistic Regression 首先是针对二分类任务提出的一种分类方法
- 如果将概率看成一个数值属性,则二元分类问题的概率预测就可以转化为一个回归问题。这种思路最简单的实现就是直接采用特征组的回归模型来预测概率,但是回归模型的预测结果无法控制在[0,1]之间。这时Sigmoid函数就派上用场了。
- Logistic Regression 算法
输入:m条训练数据
输出:是逻辑回归函数的对数损失函数,目的是使损失函数的值最小(将分类问题转换为了回归问题)
目标函数:称为交叉熵,目标就是使交叉熵最下,这样就可以使损失函数的值最小
2、用Logistic模型做手写数字识别:
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from sklearn.datasets import load_digits
Data = load_digits()
data = Data['data']
target = Data['target']
target_names = Data['target_names']
feature_names = Data['feature_names']
images = Data['images']
from sklearn.model_selection import train_test_split
x_train, x_test, y_train, y_test = train_test_split(data,target,test_size=0.2)
display(x_train.shape,y_train.shape,x_test.shape,y_test.shape)
'''
(1437, 64)
(1437,)
(360, 64)
(360,)
'''
from sklearn.linear_model import LogisticRegression
'''逻辑回归模型参数说明
1、penalty选择l2正则,默认就是l2
2、C=1.0,默认是1.0(惩罚因子,越大越严格,可能导致过拟合,太小又可能欠拟合)
3、solver:优化算法,有{'newton-cg','libfgs','liblinear','sag','saga'},默认libfgs
newton-cg、libfgs:适用中数据集
sag、saga:适用大量数据集(>10万),采用部分样本进行梯度下降,随机平均梯度下降,不适合%%sh数据集
liblinear:一般适用小数据集,适用的是liblinear库
后面会使用自动调参,会自动选择适合的优化算法
4、max_iter:最大迭代次数,默认100,如果不够会警告,就要根据警告不断调节,注意只有{'sag','libfgs','newton-cg'}才会使用该参数
5、n_jobs:多进程处理,一般设置为CPU数量的1-2倍(电脑win+r,输入msinfo32查看cpu)
'''
Lg = LogisticRegression(solver='liblinear')
%timeit Lg.fit(x_train,y_train)
Lg.score(x_test,y_test)
Lg.score(x_train,y_train)
from sklearn.neighbors import KNeighborsClassifier
knn = KNeighborsClassifier()
%timeit knn.fit(x_train, y_train)
knn.score(x_test,y_test)
knn.score(x_train,y_train)
3、总结:
- 在使用Logistic模型时,要根据数据集大小调整模型优化算法。
- 通过实验发现,Logistic回归算法训练时间比KNN要长,但是预测时间要比KNN短。