【机器学习】knn(k-近邻算法)&numpy安装

照着机器学习实战这本书来学习机器学习的,自己写下点学习的收获。


0.安装numpy

我是在windows环境下安装numpy,然后百度,搜到了这篇文章http://book.2cto.com/201401/39327.html

我觉得写的蛮仔细的,就按着这个方法来装,谁知道安装程序检测不到本机装了Python。

纳尼,我刚刚还看了下版本好是Python2.7.8

后来看看文章,适配的是2.7版本的,可能版本号不适合吧。


然后去下numpy-1.8.1-win32-superpack-python2.7,站内地址http://download.csdn.net/detail/sser_cm/7592829

也不行,然后我最后找到了numpy-MKL-1.8.2.win-amd64-py2.7这个版本,这个是适配64位机的,估计之前都是32位的所以没有检测到吧,这个可以检测到了Python了,然后运行成功,可以成功导入numpy模块,

下载地址:http://download.csdn.net/detail/qq_17246605/8752329


1.knn

knn应该算得上是机器学习的入门算法了吧,主要思想是:

根据你的附近k个邻居的值算出你的值

比如,隔壁老王家的房子2块钱,隔壁老李家的房子3块钱,你家房子多少钱,大概2-3块钱吧,反正不会特别贵。

再比如,隔壁老王家的房子200w,隔壁老李家的房子300w,你家房子多少钱,反正2块钱买不到。


knn大概就是以“物以类聚”为中心思想的,聚在一起的,值应该是差不多。计算出离你最近的几家的房价,大概就能猜出你家的房价了。


那么距离怎么算呢?

一般来讲,我们用的是欧几里德距离,什么是欧几里德距离?

点1:(x1,y1)

点2:(x2,y2)

我们平时算的两个点的距离,平方又开根号的那个就是。


那么这个点又是怎么来的呢?

以房子来讲,除开地段而言,我们会看一下房子的面积,房子的面积为x,这个就是一个一维的点,如果再考虑绿化y,那么(x,y)就是一个二维的点(我实在想不到其他因素了。。。)。

我们可以将一个对房价可能产生影响的因素作为一个特征xi,取n个特征,那么(x1,x2...xn)就可以表示一个点。


点表示完了,就可以计算距离,然后选出最近的k个点,取它们的平均房价作为你家房子的房价就可以了。

以上是最最基础的knn

*********************************************************************我是好简单和简单的分割线******************************************************************************


在上面的例子中,按照常识,我们会知道绿化率对于房价的影响不比面积来的重要,对于这种情况,我们可以在计算欧几里德距离的时候,

对不同的特征赋予不同的权重

比如上述,房价仅有面积和绿化影响时,我们用(x1,y1),(x2,y2)表示点,那么点的距离的时候可以这样计算:

w1*(x1-x2)^2+w2*(y1-y2)^2

w1,w2就是对应的权重,(你们看我没开根号,因为开不开根号,对应的大小是不变的,所以可以不用开根号,当然,我也不会打这个符号=。=)

根据不同的权重计算出的距离可能更符合实际情况。


当然,稍微有点常识的人也知道,房子的面积一般是100这个数量级的,而绿化一般是0.4这个数量级的,就算不赋不同的权重,算出的结果也不怎么影响。

#此处要放个逗我么的图=。=#

当几个特征对于房价的影响都差不多,但是量级不一样时,很容易出现值大的特征对房价影响大的情况,怎么办呢?


特征归一化

这个就不用我多说了吧,归一化大家都懂得= =

(x-Min)/(Max-Min)


还有种情况,你家、隔壁老王家的房子和隔壁老李家的房子面积一样,绿化不一样,但是老王家的房子卖3块钱,老李家的只要2块钱,这是因为老王家附近有个公园,公园里的绿化高,而老李家距公园较远。

那这个时候你会想说,那我们把距公园的距离也作为一个特征吧。


要知道,并不是所有影响房价的因素你都能提前获知的,在我们不考虑附近有公园的情况下,

假设k=2,老王老李家距你家最近,按照之前的算法,你家的房价就是老王老李家房价的均值,(2+3)/2=2.5


但是如果老王家的绿化是0.5,你家的绿化是0.48,老李家的绿化是0.3时,显然,你家也靠近公园,你家的房价应当更接近老王家而不是均值。

我们使用加权平均值来计算房价。距离近的点赋予的权重高,距离远的点赋予的权重低。

这个权重吗,你可以自己设,比如现在k=2,我可以取权重值为0.7,0.3,计算出来你家的房价就是3*0.7+2*0.3=2.7,更接近老王家的价格。

当k=3时,可以取权重为0.5,0.3,0.2,你觉得合理就好。

当然你可以自己用计算出的距离来更精确地赋予权重,在保证权重和为1的情况下,你开心就好


THE END~

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值