机器不学习系列-机器学习到底是个啥
机器不学习系列
为了更好的阅读体验请移步于:https://mp.weixin.qq.com/s/W4srZU1FlLfzp7clk7_xfA
机器学习到底是个啥
目标人群
只要对机器学习感兴趣的人!
什么是机器学习?
“
机器学习可以看做是一种工具,通过若干通用的算法帮你找出数据中潜在的某种规律或模式,在该过程中,你不需要针对此问题做一些额外的编码工作,你需要做的只是将数据“喂”给算法,它会根据数据自动进行学习!
”
比如:
分类算法,可以自动将数据划分到不同的组!
回归算法,可以自动预测输入序列对应的结果!
聚类算法,可以自动将“物以类聚,人以群分”!
☝来些简单的例子!手写数字识别(老生常谈的例子)、垃圾邮件分类(类似垃圾短信分类)
上述例子,通过以不同的方式对数据进行处理之后,将其“喂”给机器学习算法,即可得到对应的结果!其他类似的分类算法也可以照着葫芦画瓢。(效果的好坏另说)
机器学习就是上述这些“神奇”的算法的汇总!
机器学习算法有哪些?
有监督学习(数据有标签)
无监督学习(数据无标签)
当然,还可以分为半监督学习,弱监督学习,强化学习...(简单一点儿!)
有监督学习 案例
现在房地产这么红火,假设你是某楼盘的销售经理,手底下有一些新入职的实习生,对业务不太熟悉,他们不太知道咋卖,万一卖亏了咋整!要挨批的。你,作为一个宅心仁厚的leader,当然要主动帮助下属了解市场行情!
所以你根据你的经验把影响房价的某些因素一一列举出来,供小的们学习!为了更加体现你的无私,你还把自己的销售数据都贡献了出来!
你还用心的整理了一下,影响售价的主要包括:房屋格局、房屋面积、房屋所处地段等!你为了检验小的们是不是真的知道咋销售楼盘了?还给他们一组数据去猜猜看,能买多少?
上述的过程就是监督学习的原理,你知道每间房屋可以买多少钱!话句话说,你知道问题的答案,你可以从其数据中找寻某些规律!
监督学习的过程就可以将上述数据标准化,然后将数据“喂“给机器学习算法,算法即可自动学习出数据之间可能潜在的某种数学表达!其实就类似于下面这种奥数课找规律的问题!
无监督学习 案例
让我们继续上面的那个案例,你依旧是某楼盘的销售经理,依旧要帮下属了解市场,但是不同的是,你售盘的价格不想告诉他们,因为关乎到提成因素等等!
所以上面的数据就变成这副德行了,那可咋整!不知道销售价格,给我这份数据有啥用!真的没有用嘛!咱们慢慢分析!
这可是销售数据撒!我们还是可以从该数据中得知出一些规律!
比如:郊区的购房者更愿意买面积大的房型,市区里面的购房者更愿意买面积小,但是居室多的房型等等!你还可以发现销售记录有哪些比较“骚”的,可能这些提成更多!(即离群点检测)
上面的案例,还算有点儿意思,但是这么机器学习只能做这么简单的事儿嘛!或者说这就是机器学习嘛!其实不然,咱们人类的大脑在接触一段时间事物之后可以本能的学习该事物的特定,并对此作出准确的判断!比如:读到这里,你肯定认识我码的每一个字,这就是分类,这就是大脑的学习!
机器学习的本质即复制人类的这种学习和预判能力,让计算机可以更好的为人类服务!
但就目前而言,机器学习算法并不是那么的完美!只能针对非常具体的问题,在有限的范围内,进行训练!
talk is cheap,show your code!
找规律找出来的销售楼盘价格跟那些因素有关!
def estimate_house_sales_price(num_of_bedrooms, sqft, neighborhood): price = 0 # In my area, the average house costs $200 per sqft price_per_sqft = 200 if neighborhood == "hipsterton": # but some areas cost a bit more price_per_sqft = 400 elif neighborhood == "skid row": # and some areas cost less price_per_sqft = 100 # start with a base price estimate based on how big the place is price = price_per_sqft * sqft # now adjust our estimate based on the number of bedrooms if num_of_bedrooms == 0: # Studio apartments are cheap price = price — 20000 else: # places with more bedrooms are usually # more valuable price = price + (num_of_bedrooms * 1000) return price
代码解释:根据neighborhood判断price_per_sqft,以此根据房屋面积计算房屋价格,并在此基础上,根据房型居室的数量进行调整!
def estimate_house_sales_price(num_of_bedrooms, sqft, neighborhood): price = <computer, plz do some math for me> return price
def estimate_house_sales_price(num_of_bedrooms, sqft, neighborhood):
price = 0
# a little pinch of this
price += num_of_bedrooms *
# and a big pinch of that
price += sqft *
# maybe a handful of this
price += neighborhood *
# and finally, just a little extra salt for good measure
price +=
return price
我们就可以根据这些参数去自动推断出当前楼盘应该销售什么价位才比较合理!
那这是咋做到的!
1
def estimate_house_sales_price(num_of_bedrooms, sqft, neighborhood): price = 0 # a little pinch of this price += num_of_bedrooms * # and a big pinch of that price += sqft * # maybe a handful of this price += neighborhood * # and finally, just a little extra salt for good measure price += return price
初始假定我只知道房屋售价与num_of_bedrooms,sqft,neighborhood这三个因素有关,先假定参数为1.0。
2
根据当前设定的参数,计算一下跟我们实际销售的价格差多少!
根据上述的结果,发现有的亏了有的赚了!那么我怎么去评估当前这套参数好不好呐?我们将猜测的价格和实际的销售价格做差,然后将其累加求和算均值!以这个结果评判参数选的好不好。我们跟它取个名字叫做:Cost!Cost的值就是你算法学习的好坏!如果Cost为0,那么当前算法模型就是很厉害,prefect!可以把所有的结果都预测正确!所以我们的目标就是将这个值降的越小越好!
3
我们就不断的尝试不同的组合,为达到我们的目的持续坚持着!如果数据合理的情况下,我们终究会找到一组最好的参数,可以帮助我们合理的预测售价!
接下来,我们想一想,上述过程的意义何在!
emm
1.计算机算出来的参数要比我们精确的多!
2.计算机连这个问题本身是啥都不知道!他只知道算数!
3.你可能并不理解他怎么算出来的,但真的有用对不!
上述的这些过程,不单单是针对这个问题,自动驾驶等等各种高科技也是以这些东西作为根基!
上面1,2,3过程当中最重要的是第三步,第三步不断的尝试到底要尝试到猴年马月嘛!
不要着急,不要慌张,前人早就帮我们解决这个问题了!
还记得咱们前面说的Cost的定义嘛,这里假设我们一共有500间已售的房子!
如果我们将这个函数形式化定义一下,就得到了如下所示的公式:
针对上述类似的问题,我们其实都是求解类似的公式的解!
我们只是不断的在调节参数,然后使得Cost的值可以变得越来越小,纵轴即为Cost值,横轴即为可调节的参数。相同的颜色表示再同一的切面上!
上述图案的最低端即为我们想要达到的位置。
如果你还记得微积分课上的学习内容,你便知道,我们在当前所处的位置,只需要沿着负梯度的方向一点点的走,就可以达到我们想去的最低端的位置!
所以我们需要做的就是计算Cost的偏导数,然后在参数权重当中减去这个值,我们就可以离最底部越来越近,当然我们需要慢慢走,以免错过最优解!步子大了容易扯到蛋!
当然这些东西,你并不需要真的知道的这么详细,机器学习包都会帮你解决这些问题,但是如果你想了解其中的细节,这也是很好的!尤其是如果你是机器学习的从业者!
还有一个问题就是,我们在上述过程中,采用了较为简单的线性回归模型,其实当问题变得复杂的时候,机器学习提供了丰富多样的算法模型可供我们去处理这些问题!
后续的文章里面会一一进行介绍!
上述的过程还是较为简单,忽略了很多算法的细节,以及机器学习过程中需要考虑的问题,比如过拟合等等,毕竟机器学习这么大的体量不是一篇两篇可以搞定的,本篇文章只是为了让大家稍微了解机器学习!
万能?
机器学习可以做的事情实在是太多太多,high level到可以开车打游戏,low level到可以帮你做作业!好像只要你有足够多的数据,机器学习就可以帮你搞定一切!
但是记住,机器学习只有在问题实际可以被解决的时候才有效!
就比如:股市,量化交易真的可以赚大钱嘛!我真的不知道,但是想想也明白!
只有当输入和输出之间真的存在某种关联或者模式的时候,机器学习才可能学习的到!今天北京的花开了跟明天广州下雨了没啥关联!所以机器学习真的搞不定!
所以,机器学习可以可能将人类目前所做的各种劳作进行简化,但是并不能去凭空创造出某种人类都未知的解决方案!
钱不是万能的,没钱是万万不能的(机器学习也是一样:-P)
如果对上述内容感兴趣,请关注公众号: CodeMonkeyX日常
#机器学习##读书笔记#