机器学习从入门到放弃之逻辑回归
分类问题
回到本系列的第一篇文章机器学习从入门到放弃之KNN算法,在里面有这样的一个问题
黄点代表1类电影的分布,绿色代表0类电影的分布,紫色代表需要分类的电影样本。
那么该怎么判别紫色的那颗点所在的类别呢?
之前给出的是KNN算法,通过计算紫色点都周边的剧场的长短,来判断紫色点属于哪个类别。现在有这样一种极端情况,黄点和绿点在紫点周围呈圆周分布,距离一样,咋办?
图画得不是太好,大家理会我的意思就行。
在这种情况,假如像下图这样的情况,就容易处理得多了。
红线的下方是黄色种类,上方时绿色种类。
这种情况我们称之为线性分类,关于如何拟合出这条线程函数下面会讲述。现在先来说说,既然这叫线性分类,那么必然会有非线性的情况啊,那咋办呢?
没错,如果特征可以被线性函数全部表达,这自然是理想情况,但实际问题中更多的非线性分类。
这时,我们需要将线性函数转换为非线性函数。那怎么转换呢,很简单,将线性函数(假设叫z),扔到某一非线性函数f(x)内,得到新的表达式y = f(z),就是我们所需的非线性分类器了,而f(x)也就作激活函数,它有很多种,本文只介绍逻辑回归所使用到的sigmoid函数,其表达式是
其图像有一个漂亮的S型
可见在x的取值范围足够大的时候,其从0变1的过程可以忽略不计,因此,我们习惯的把>0.5归为1类,归为0类,那么恰好是0.5怎么办?这个概率是极低的,如果真的是0.5,那就随机归类,然后出门买张彩票吧,说不定就不用继续当程序员了。 (/≥▽≤/)
上面函数图像引用云深不知处的博客
算法介绍
回到表达式上,可知函数的变量是z其余都是常量,所要要求解该分类函数的值,就是要确定z的值而z是线性方程,基本的数学知识不难知道,
$$z=a1x1+a2x2……an*xn$$
其中[x1……xn]是输入向量,所以训练的过程就是确定于[a1,a2……an]的值,使得该表达式对于多个输入向量的输出值正确率最高。
下面开始讲述求最佳的[a1,a2……an]的方法
显然,我们可以设计一个函数来衡量[a1,a2……an]是否最佳,比如说这样的
$$J(a) = sum_{n=0}(f_a(xi)-y)^2$$
显然当J(a)达到最小值时,a的值最佳。方法如下,
初始化weight,可以使用随机值
代入式子得到err = y - predict
weight = weight + alpha error x_train[i],其中alpha称为学习速率,太小会影响函数的收敛速度,太大刚才就不收敛了。
为了解决上述问题,在《机器学习实战中》使用了动态更新alpha的方法,式子为alpha = 4/(1+i)+0.01
上述修改weight的过程称为梯度下降法,其中我故意略去了数学证明部分,需要的同学请自行查找专业资料。
代码实现
github
文章描述如有错误,欢迎指正。
关注我
我的个人公众号开启啦,微信公众号搜索肥兔子的碎碎语,你能查看到更多学习心得的分享噢⊙ω⊙。
关键字:机器学习, Python, 函数, 表达式
版权声明
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处。如若内容有涉嫌抄袭侵权/违法违规/事实不符,请点击 举报 进行投诉反馈!