1. 数学表示
yj=sign(ω1x1+ω2x2+...+ωmxm)
对于二元分类,结果为+时可标记为正类,结果为负时标记为负类。
2. 损失函数
样本标签为
y¯,根据权重计算输出为
y^,当
y¯与
y^相同时,损失记为0,否则,损失记为1。称为
0-1损失函数。
1. 数学表示
yj=ω1x1+ω2x2+...+ωmxm
2. 损失函数
线性回归用的损失函数为平方损失函数:
Loss=∑(yi−yi¯)2。为何采用平方损失函数呢?回归任务的输出是在实数范围,为了表示损失大小,最基本的想法是通过绝对值表示损失的绝对大小,并进行累加,但绝对值函数是非连续的函数,无法进行优化训练。采用平方的方式与绝对值函数在问题空间上表示是一致的,而且方便进行优化,得出最优解。
1. 数学表示
hθ(x)=1/(1+exp−(ω1x1+ω2x2+...+ωmxm))。
假设输入数据服从贝努力分布,逻辑回归任务目标是估计输入数据属于不同类别的概率。
2. 损失函数
Loss(hθ(x),y)={−log(hθ(x))−log(1−hθ(x))if y=1if y=0
当y=1时,假定这个样本为正类。如果此时hθ(x)=1,则单对这个样本而言的cost=0,表示这个样本的预测完全准确。那如果所有样本都预测准确,总的cost=0
但是如果此时预测的概率
hθ(x)=0,那么
Loss→∞。直观解释的话,由于此时样本为一个正样本,但是预测的结果P(y=1|x;θ)=0, 也就是说预测 y=1的概率为0,那么此时就要对损失函数加一个很大的惩罚项。
当y=0时,推理过程跟上述完全一致,不再累赘。
将以上两个表达式合并为一个,则单个样本的损失函数可以描述为:
Loss(hθ(x),y)=−ylog(hθ(x))−(1−y)log(1−hθ(x))
from sklearn.linear__model import LinearRegression #线性回归
lr = LinearRegression(fit_intercept=True,normalize=False,copy_X=True,n_jobs = 1)
from sklearn.linear__model import LogisticRegression #逻辑回归
lr = LogisticRegression(penalty='l2',C=1.0,max_iter=100,multi_class='ovr',solver='liblinear',tol=1e-4)
解释一下出现的关键参数:
fit_intercept:可以理解为二维坐标中是否是正比例函数,即是否
x为0向量时,
y的值为0。
normalize:是否将数据归一化。
copy_X:是否将训练数据X复制一份,还是在X上进行覆盖。
n_jobs:使用的CPU的核数。
penalty:正则化参数,取值为l1或l2.
C:对于参数
w,为了防止
w对预测结果影响过大,也即出现过拟合,在损失函数中加入
λw2,C为
1/λ。可见C大,则
λ小,对参数的限制就小,对参数引起的过拟合容忍度高。超参数。
max_iter:训练迭代的次数,超参数。
multi_class:ovr或者multinomial.
solver:训练过程中的优化策略,有liblinear,newton-cg,lbfgs,sag,saga等。其中liblinear对于小数据集效果好,sag和saga处理效率更高。
tol:在误差大小达到多少时可以提前停止训练。超参数。