【笔记】Week3:分类问题及其表示,逻辑回归模型,正则化 (Machine Learning)

吐槽:并不是非常连贯的听完了这周的课程,于是记个笔记捋一下思路,顺便记录一个quiz的题目,做错两遍都不造为什么,,最后还是查了一下才发觉的。。太值得记一下= =

正文:

1,Classification and Representation(分类问题及其表示)

分类问题的例子:邮件是垃圾还是非垃圾,在线交易是欺诈的还是非欺诈的,肿瘤是良性的还是恶性的。如果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)。

2,Logistic Regression Model(逻辑回归模型)

为什么逻辑回归不能用线性回归的代价函数:如果这样,代价函数则是一个非凸函数,那么就没法用梯度下降法找到全局最小值。

代价函数的一般形式: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。

3,Regularizxianglianghation(正则化)

过拟合问题:如果我们有很多特征,则假设函数可能很拟合训练集内容,但是并不能推广到新的例子上(产生情况:很多特征和很少的训练数据)。

解决方案:减少特征数量(人工挑选,模型选择算法);正则化(保持所有参数但减少其权重,在有很多特征时很好)

正则化后的代价函数: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。

你可能感兴趣的:(AI/ML/DL相关,笔记,MATLAB)