【机器学习】初级算法梳理-逻辑回归-打卡
1、逻辑回归与线性回归的联系与区别
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/51ab418d84f688a888b302a0abcd8057.png)
-在线性回归模型中,输出一般是连续的, 对于每一个输入的x,都有一个对应的输出y。因此模型的定义域和值域都可以是无穷。
-逻辑回归,输入可以是连续的[-∞, +∞],但输出一般是离散的,通常只有两个值{0, 1}。
2、 逻辑回归的原理
(1)找一个合适的预测函数(Andrew Ng的公开课中称为hypothesis),一般表示为h函数,该函数就是需要找的分类函数,它用来预测输入数据的判断结果。这个过程时非常关键的,需要对数据有一定的了解或分析,知道或者猜测预测函数的“大概”形式,比如是线性函数还是非线性函数。
(2)构造一个Cost函数(损失函数),该函数表示预测的输出(h)与训练数据类别(y)之间的偏差,可以是二者之间的差(h-y)或者是其他的形式。综合考虑所有训练数据的“损失”,将Cost求和或者求平均,记为J(θ)函数,表示所有训练数据预测值与实际类别的偏差。
(3)显然,J(θ)函数的值越小表示预测函数越准确(即h函数越准确),所以这一步需要做的是找到J(θ)函数的最小值。找函数的最小值有不同的方法,Logistic Regression实现时有的是梯度下降法(Gradient Descent)。
3、逻辑回归损失函数推导及优化
https://blog.csdn.net/chibangyuxun/article/details/53148005
4、 正则化与模型评估指标
正则化,参考:https://blog.csdn.net/panghaomingme/article/details/54022709
模型评估指标:
精确率,precision = TP / (TP + FP) 即正确预测的正反例数 /总数
准确率,accuracy = (TP + TN) / (TP + FP + TN + FN) 精确率容易和准确率不能混为一谈,为预测出是正的里面有多少真正是正的。可理解为查准率。
召回率,recall = TP / (TP + FN) 表现为在实际正样本中,分类器能预测出多少。
F1 Score = P*R/2(P+R),其中P和R分别为 precision 和 recall ,在precision与recall都要求高的情况下,可以用F1 Score来衡量。
ROC曲线 逻辑回归里面,对于正负例的界定,通常会设一个阈值,大于阈值的为正类,小于阈值为负类。如果我们减小这个阀值,更多的样本会被识别为正类,提高正类的识别率,但同时也会使得更多的负类被错误识别为正类。为了直观表示这一现象,引入ROC。在图中,横坐标为False Positive Rate(FPR假正率),纵坐标为True Positive Rate(TPR真正率)。
AUC(Area Under Curve)被定义为ROC曲线下的面积(ROC的积分),通常大于0.5小于1。AUC值(面积)越大的分类器,性能越好
5、逻辑回归的优缺点
优点:
(1)速度快,适合二分类问题
(2)简单易于理解,直接看到各个特征的权重
(3)逻辑回归求解的目标函数是任意阶可导的凸函数,有很好的数学性质,现有的许多数值优化算法都可直接用于求解最优解
(4)不是仅预测出“类别”,而是可得到近似概率预测,对于许多需利用概率辅助决策的任务很有用。
缺点:
(1)容易欠拟合或过拟合,分类精度不高
(2)数据特征有缺失或者特征空间很大时表现效果并不好
(3)高度依赖正确的数据表示
(4)由于其结果是离散的,Logistic 回归只能预测分类结果。
6、样本不均衡问题解决办法
-样本的过采样和欠采样。
-使用多个分类器进行分类。
-将二分类问题转换成其他问题。
-改变正负类别样本在模型中的权重。
参考:https://blog.csdn.net/xiaocong1990/article/details/82145097
7.sklearn参数
penalty=’l2’, 参数类型:str,可选:‘l1’ or ‘l2’, 默认: ‘l2’。该参数用于确定惩罚项的范数
dual=False, 参数类型:bool,默认:False。双重或原始公式。使用liblinear优化器,双重公式仅实现l2惩罚。
tol=0.0001, 参数类型:float,默认:e-4。停止优化的错误率
C=1.0, 参数类型:float,默认;1。正则化强度的导数,值越小强度越大。
fit_intercept=True, 参数类型:bool,默认:True。确定是否在目标函数中加入偏置。
intercept_scaling=1, 参数类型:float,默认:1。仅在使用“liblinear”且self.fit_intercept设置为True时有用。
class_weight=None, 参数类型:dict,默认:None。根据字典为每一类给予权重,默认都是1.
random_state=None, 参数类型:int,默认:None。在打乱数据时,选用的随机种子。
solver=’warn’, 参数类型:str,可选:{‘newton-cg’, ‘lbfgs’, ‘liblinear’, ‘sag’, ‘saga’}, 默认:liblinear。选用的优化器。
max_iter=100, 参数类型:int,默认:100。迭代次数。multi_class=’warn’, 参数类型:str,可选:{‘ovr’, ‘multinomial’, ‘auto’},默认:ovr。如果选择的选项是’ovr’,那么二进制问题适合每个标签。对于“多项式”,最小化的损失是整个概率分布中的多项式损失拟合,即使数据是二进制的。当solver ='liblinear’时,‘multinomial’不可用。如果数据是二进制的,或者如果solver =‘liblinear’,‘auto’选择’ovr’,否则选择’multinomial’。
verbose=0, 参数类型:int,默认:0。对于liblinear和lbfgs求解器,将详细设置为任何正数以表示详细程度。
warm_start=False, 参数类型:bool,默认:False。是否使用之前的优化器继续优化。
参考:https://blog.csdn.net/HappinessSourceL/article/details/84854807
https://blog.csdn.net/weixin_43760925/article/details/98938883