吐槽:并不是非常连贯的听完了这周的课程,于是记个笔记捋一下思路,顺便记录一个quiz的题目,做错两遍都不造为什么,,最后还是查了一下才发觉的。。太值得记一下= =
正文:
分类问题的例子:邮件是垃圾还是非垃圾,在线交易是欺诈的还是非欺诈的,肿瘤是良性的还是恶性的。如果y只有0或1,0则为negative class(比如恶性肿瘤),1则为positive class(良性肿瘤)
为什么不用线性回归解决分类问题:考虑输出只有01的情况,假设0.5是阈值,高于是1低于是0,如果用线性回归:则h(x)是存在>1或<0的值,离我们的阈值太远;而且训练的模型很容易受到新的训练集例子的影响,比如新的训练集例子离以前的0.5处对应的x远,则新的h(x)=0.5处的x值则会向新的训练集例子处偏移。
分类问题的表示:希望0<=h(x)<=1,所以用逻辑回归模型,即sigmoid函数,也叫logistic函数。h(x) = 1/(1 + e^(-thetaTx))(sigmoid函数记为g(z)=1/(1+e^(-z)),h(x)记为g(thetaTx))
对h(x)的解释:x为某值时y=1近似的概率,比如在肿瘤分类问题上h(x)=0.7,也就是在这个x时y=1(肿瘤是良性)的概率是0.7.
决策边界:就是thetaTx=0时代表的边界(可以是直线可以是曲线),也是假设函数h(x)在确定了参数theta后定义的一个性质(产生原因是thetaTx>=0时y=1,<0时y=0)。
为什么逻辑回归不能用线性回归的代价函数:如果这样,代价函数则是一个非凸函数,那么就没法用梯度下降法找到全局最小值。
代价函数的一般形式:J(theta) = -1/m*sum(cost(h(x^(i)), y^(i)))(i=1到m求和)
逻辑函数的cost(h(x^(i)), y^(i)):-log(h(x)) if y=1; -log(1-h(x)) if y=0(等价形式:y*log(h(x)) + (1-y)*log(1-h(x)),推导是用极大似然估计,总结:cost = 0 if h(x) = y; cost->inf if y = 0 and h(x)->1; cost->inf if y = 1 and h(x)->0)
逻辑函数的代价函数:J(theta) = -1/m*sum(y^(i)*log(h(x^(i))) + (1-y^(i))*log(1-h(x^(i))))(i=1到m求和)
梯度下降法:repeat{ theta_j := theta_j - alpha*1/m*sum( (h(x^(i))-y^(i) )*x_j^(i) } (note: simultaneously update all theta_j) (这里的公式和线性回归长的一样,但是要注意h(x)不一样,所以还是有区别)
向量化实现:h = g(X*theta); J(theta) = 1/m*(-yT*log(h) - (1-y)T*log(1-h)); theta = theta - alpha*1/m*XT*(g(X*theta) - y)
高级优化算法:联合梯度法,BFGS,L-BFGS(优:不用人工选择alpha,一般比梯度下降法快;缺:更复杂)
octave里面的实现:options = optimset('GradObj', 'on', 'MaxIter', 100); initialTheta = zero(2,1); [optTheta, functionVal, exitFlag] = fminunc(@costFunction, initialTheta, options);
多分类问题:就是y的离散值个数>=3,比如天气分类,晴天多云雨天雪天。
多分类问题的决策边界:就是把第一个类看作y=1其他类都看作y=0然后画一条叫h^(1)(x),以此类推,第n个类看作y=1其他类都是y=0画一条叫h^(n)(x)。
一对多:k个类有k个不同的分类器,选择的类i应该是使h^(i)(x)最大的i。
过拟合问题:如果我们有很多特征,则假设函数可能很拟合训练集内容,但是并不能推广到新的例子上(产生情况:很多特征和很少的训练数据)。
解决方案:减少特征数量(人工挑选,模型选择算法);正则化(保持所有参数但减少其权重,在有很多特征时很好)
正则化后的代价函数:J(theta) = 1/(2m)*[sum( (h(x^(i))-y^(i))^2 ) + sum( lambda*sum((theta_j)^2) )](第一个sum从1到m,第二个sum从1到n,注意不是0到n)
正则化后的梯度下降法:repeat{ theta0 := theta0 - alpha*1/m*sum( (h(x^(i))-y^(i) )*x_0^(i); theta_j := theta_j*(1-alpha*lambda/m) - alpha*1/m*sum( (h(x^(i))-y^(i) )*x_j^(i) } (note: simultaneously update all theta_j)
正则化后的正规方程法:theta = (XTX + lambda*对角线为011...111的大小为(n+1)*(n+1)的矩阵)^(-1)*XT*y
quiz里面错的题目:使用正则化一定可以优化训练集外的数据吗?不一定,跟lamda的取值有关(lambda如果过大则h(x) = theta0,即theta1到n都近似为0的情况)。(https://blog.csdn.net/wangcong02345/article/details/79028050)
补充:
2020/7/19:正则化的向量实现请看ex3。