上篇我们以预测房价为例介绍了什么是有监督机器学习和无监督机器学习,本篇将主要讨论有监督机器学习。
你可能一直有一个疑问,预测房价可以算是“学习”吗?
作为人类的一员,你的大脑可以应付绝大多数情况,并且在没有任何明确指令时也能够学习如何处理这些情况。如果你做房地产经纪人时间足够长,你对于房产的合适定价、房屋的最佳营销方式以及客户会感兴趣类型等等都会有一种本能般的“感觉”。强人工智能研究的目标就是要计算机复制这种能力。
但是目前的机器学习算法还没有那么强大——它们只能在非常特定的、有限的问题上有效。也许在这种情况下,“学习”更贴切的定义是:在少量样本数据的基础上找出一个公式来解决特定的问题。
但是“机器在少量样本数据的基础上找出一个公式来解决特定的问题”不是个好名字。所以最后我们用「机器学习」取而代之。
所以,你打算怎么写上面例子中评估房价的程序呢?在往下看之前先思考一下吧。
如果对机器学习一无所知,你很有可能会尝试写出一些基本规则来评估房价,如下:
def
estimate_house_sales_price(num_of_bedrooms, sqft, neighborhood):
price = 0
# 在我这地方,每平方英尺房屋均价是 200 美元
price_per_sqft = 200
if
neighborhood == "hipsterton":
#
但是有些地段房价会贵一点
price_per_sqft = 400
elif neighborhood == "skid row":
#
有些地段房价便宜点
price_per_sqft = 100
# 我们先按面积大小估计房屋价格基准
price = price_per_sqft * sqft
# 现在根据卧室数量微调价格
if
num_of_bedrooms == 0:
#
工作室类型的公寓比较便宜
price = price — 20000
else:
#
卧室数量越多,通常房价越贵
price
= price + (num_of_bedrooms * 1000)
return price
假如你像这样瞎忙几个小时,最后也许会得到一些像模像样的东西。但是你的程序永不会完美,而且当价格变化时很难维护。
如果能让计算机找出实现上述函数功能的办法,岂不更好?只要返回的房价数字正确,谁会在乎函数具体干了些什么呢?
def
estimate_house_sales_price(num_of_bedrooms, sqft, neighborhood):
price = <计算机,请帮我算点数学题>
return price
考虑这个问题的一种角度是将价格看作一碗美味的汤,而汤的原材料就是卧室数量、面积和地段。如果你能算出每种原材料对最终的价格有多大影响,也许就能得到各种原材料混合形成最终价格的具体比例。
这样可以将你最初的程序(全是令人抓狂的 if else 语句)简化成类似如下的样子:
def
estimate_house_sales_price(num_of_bedrooms, sqft, neighborhood):
price = 0
# 一小撮这个
price += num_of_bedrooms * .841231951398213
# 一大撮那个
price += sqft * 1231.1231231
# 或许再加一把这个
price += neighborhood * 2.3242341421
# 最后,再多加一点点盐
price += 201.23432095
return price
注意那些神奇的数字——.841231951398213, 1231.1231231, 2.3242341421, 和201.23432095。它们称为权重(weight)。如果我们能找出对每栋房子都适用的完美权重,我们的函数就能预测所有的房价!
下一篇我们将讨论如何找到这种完美的权重:
作者:Adam Geitgey
原文:https://medium.com/@ageitgey/machine-learning-is-fun-80ea3ec3c471#.ak1of1xbg
翻译:巡洋舰科技——赵95
相关文章: