- 逻辑回归与线性回归的联系与区别
联系: 逻辑回归在过程中也应用了直线进行了边界的划分, 可以说是使用回归算法的分类方法
区别:最大的区别就在于他们的因变量不同, 线性回归模型就是预测一个连续变量(如降水量,价格等)。而逻辑回归则是解决分类问题, 在分类问题中,预测属于某类的概率.一般解决二分类问题, 逻辑回归的输出是[0,1]区间.
2逻辑回归的原理
(1)找一个合适的预测函数,用它能解决二分类问题, 以z直线两端表示两个类别(数据划分边界为曲线也是类似)
2)构造损失函数(利用极大似然概率算法)代表结果取1的概率
表示取0的概率
(3)梯度下降法求的最优值,即对最大似然法求导
3
逻辑回归损失函数推导及优化
推导:
取负号后
解出w的变化值
4.正则化与模型评估指标
正则化是一个通用的指标,产生过拟合现象(模型复杂性(参数过多,参数过大))的算法都可以使用正则化来避免过拟和(一是减少模型复杂度,一是增加训练集个数),正则化常常是用来限制模型参数值不要过大,一般会采用L1范数或者L2范数。其形式分别为
模型评估指标: (问题: 对于极度偏斜的数据,只使用准确度是不够的。例如预测癌症的发病率的准确度是99.9%的模型,因为癌症的发病率本身就很低,如果发病率为0.1%,那么只要说所有人都是健康的,那这个模型的准确度就是99.9%,相当于这个模型什么都没有做)
(1) 混淆矩阵
(1)精准率
精准率:预测结果为1的时候,预测正确的概率
原因:在有偏(极度偏斜)数据中,通常将1作为真正关注的对象,那么在这种情况下预测正确的概率就作为精准率。(比如:我们真正关心的是预测出了多少癌症病人,而实际上得癌症的又有多少人,即我们预测患癌症的成功率为多少)
(2)召回率
我们关注的事件真实的发生的情况下,成功预测的概率(比如:现有的癌症患者有多少人,而我们能预测出多少人)
总结: 有时候精准率高,召回率低,也有时候是精准率低,召回率高,所以选择哪个标准需要视情况而定, 股票预测,更注重精准率,如果预测错误会带来很大损失,因为有些股票处于上升期,我们或许有些没有预测到,但这并不会带来多大损失, 病人诊断过程中,我们更看重召回率, 一些人有病,而我们没有诊断出来,那么会带来很严重的影响
(3) F1 score
有时候需要同时关注精准率和召回率,所以运用新的指标F1 score,兼顾精准率和召回率,是精准率和召回率的调和平均值
(3) ROC曲线
描述TPR和FPR之间的关系
TPR:和召回率相同,表示TP除以真实值为1的数
FPR:用FP除以真实值为0的数
总结:对于有偏数据,检查精准率和召回率是很有必要的,而ROC曲线用来比较几个模型谁更好一点(通过比较包含面积大小来确定)
5.逻辑回归优缺点
优点:计算代价不高,易于理解和实现
缺点:
(1) 容易欠拟合,分类精读可能不高
(2) 对模型中自变量多重共线性较为敏感,例如两个高度相关自变量同时放入模型,可能导致较弱的一个自变量回归符号不符合预期,符号被扭转。需要利用因子分析或者变量聚类分析等手段来选择代表性的自变量,以减少候选变量之间的相关性
(3) 预测结果呈“S”型,因此从log(odds)向概率转化的过程是非线性的,在两端随着log(odds)值的变化,概率变化很小,边际值太小,slope太小,而中间概率的变化很大,很敏感。导致很多区间的变量变化对目标概率的影响没有区分度,无法确定阀值
6.样本不均衡问题解决办法
(1) 样本的过采样和欠采样
1.过采样:将稀有类别的样本进行复制,通过增加此稀有类样本的数量来平衡数据集。该方法适用于数据量较小的情况。(可能造成问题: 过拟合问题 解决方法: 使用SMOTE算法,增加随机的噪声的方式来改善这个问题)
2.欠抽样:从丰富类别的样本中随机选取和稀有类别相同数目的样本,通过减少丰富类的样本量啦平衡数据集。该方法适用于数据量较大的情况。(可能造成问题:欠拟合,解决方法: 方法一:模型融合,方法二: 增量模型)
3.也可以将过采样和欠采样结合在一起使用。
4.使用SMOTE方法来构造样本。
SMOTE算法是一种过采样的算法。这个算法不是简单的复制已有的数据,而是在原有数据基础上,通过算法产生新生数据。
算法思想:基于距离度量的方式计算两个或多个稀有类样本之间的相似性。
然后选择其中的一个样本作为基础样本,再在邻居样本中随机选取一定数量的样本对那个基础样本的一个属性进行噪声。每次处理一个属性,通过这样的方式产生新生数据。
(2) 使用多个分类器进行分类
-
模型融合思路:从丰富类样本中随机的选取(有放回的选取)和稀有类等量样本的数据。和稀有类样本组合成新的训练集。这样我们就产生了多个训练集,并且是互相独立的,然后训练得到多个分类器。
-
增量模型思路:从L1正确分类的样本中和错误分类的样本中各抽取50%的数据,即循环的一边采样一个。此时训练样本是平衡的。训练得到的分类器作为L2. 从L1和L2分类结果中,选取结果不一致的样本作为训练集得到分类器L3.最后投票L1,L2,L3结果得到最后的分类结果。
(3) 将二分类问题转换成其他问题
可以将不平衡的二分类问题转换成异常点检测,或者一分类问题(可使用one-class svm建模)
(4) 改变正负类别样本在模型中的权重
使用代价函数学习得到每个类的权值,大类的权值小,小类的权值大。刚开始,可以设置每个类别的权值与样本个数比例的倒数,然后可以使用过采样进行调优。
7.sklearn参数
sklearn.tree.DecisionTreeClassifier
(criterion=‘gini’, splitter=‘best’,
max_depth=None, min_samples_split=2,
min_samples_leaf=1,min_weight_fraction_leaf=0.0,
max_features=None,
random_state=None, max_leaf_nodes=None,
min_impurity_decrease=0.0,
min_impurity_split=None, class_weight=None,
presort=False)
criterion:特征选择的标准,有信息增益和基尼系数两种,使用信息增益的是ID3和C4.5算法(使用信息增益比),使用基尼系数的CART算法,默认是gini系数。
splitter:特征切分点选择标准,决策树是递归地选择最优切分点,spliter是用来指明在哪个集合上来递归,有“best”和“random”两种参数可以选择,best表示在所有特征上递归,适用于数据集较小的时候,random表示随机选择一部分特征进行递归,适用于数据集较大的时候。
max_depth:决策树最大深度,决策树模型先对所有数据集进行切分,再在子数据集上继续循环这个切分过程,max_depth可以理解成用来限制这个循环次数。
min_samples_split:子数据集再切分需要的最小样本量,默认是2,如果子数据样本量小于2时,则不再进行下一步切分。如果数据量较小,使用默认值就可,如果数据量较大,为降低计算量,应该把这个值增大,即限制子数据集的切分次数。
min_samples_leaf:叶节点(子数据集)最小样本数,如果子数据集中的样本数小于这个值,那么该叶节点和其兄弟节点都会被剪枝(去掉),该值默认为1。
min_weight_fraction_leaf:在叶节点处的所有输入样本权重总和的最小加权分数,如果不输入则表示所有的叶节点的权重是一致的。
max_features:特征切分时考虑的最大特征数量,默认是对所有特征进行切分,也可以传入int类型的值,表示具体的特征个数;也可以是浮点数,则表示特征个数的百分比;还可以是sqrt,表示总特征数的平方根;也可以是log2,表示总特征数的log个特征。
random_state:随机种子的设置,与LR中参数一致。
max_leaf_nodes:最大叶节点个数,即数据集切分成子数据集的最大个数。
min_impurity_decrease:切分点不纯度最小减少程度,如果某个结点的不纯度减少小于这个值,那么该切分点就会被移除。
min_impurity_split:切分点最小不纯度,用来限制数据集的继续切分(决策树的生成),如果某个节点的不纯度(可以理解为分类错误率)小于这个阈值,那么该点的数据将不再进行切分。
class_weight:权重设置,主要是用于处理不平衡样本,与LR模型中的参数一致,可以自定义类别权重,也可以直接使用balanced参数值进行不平衡样本处理。
presort:是否进行预排序,默认是False,所谓预排序就是提前对特征进行排序,我们知道,决策树分割数据集的依据是,优先按照信息增益/基尼系数大的特征来进行分割的,涉及的大小就需要比较,如果不进行预排序,则会在每次分割的时候需要重新把所有特征进行计算比较一次,如果进行了预排序以后,则每次分割的时候,只需要拿排名靠前的特征就可以了。