如何构建似然函数?

时间:2013-11-09 00:13:47

标签: python data-mining

我有很多关于吸血鬼和非吸血鬼的数据。我有一个包含2000个主题的矩阵,其中包含有关该主题的统计数据。

#[height(cm), weight(kg), stake aversion, garlic aversion, reflectance, shiny, IS_VAMPIRE?]

如果IS_VAMPIRE为1,则主题为吸血鬼,否则为0。关于如何构建一个函数来告诉我一个新主题是否是一个吸血鬼,我有几个想法,但我想知道是否有人有任何我可以追求的好主意。

2 个答案:

答案 0 :(得分:1)

您可以使用scikit-learn中的一种分类器算法。如果您已经标记了大量数据,并且您知道谁是谁并且不是吸血鬼,并且您只想对新的数据进行分类,那么对于刚接触机器学习的人来说,最简单的方法就是使用scikit-learn决策树算法,用于根据样本数据构建分类器并将其应用于新分类器。

http://scikit-learn.org/stable/modules/tree.html

>>> from sklearn import tree
>>> clf = tree.DecisionTreeClassifier()
>>> clf = clf.fit(X, Y)

其中X是包含所有数据字段的列表(或Numpy数组),除了布尔值is_vampire:

>>> X = [[v0_height, v0_weight, v0_stake_aversion, v0_garlic_aversion, 
          v0_reflectance, v0_shiny],
         [v1_height, v1_weight, v1_stake_aversion, v1_garlic_aversion, 
          v1_reflectance, v1_shiny],
         ...
        ]

Y是一个长度相同的列表,与每个列表的标签相匹配:

>>> Y = [v0_is_vampire, v1_is_vampire, ...]

安装后,树可用于通过以下调用检查新的是否是吸血鬼,其中new是X中的子列表:

>>> clf.predict(new)
array([1])

根据数据范围在数据中的分布方式,您可能需要也可能不需要提供所有值以获得合适的分类。你必须尝试一点点。

请记住,如果您的Y数组仅为is_vampire标签提供1和0值,则此方法将为您提供相同的二进制响应。如果您的Y数组具有浮点值,并且您想要量化新值为0到1之间的吸血鬼的概率,那么只需使用tree.DecisionTreeRegressor类而不是tree.DecisionTreeClassifier

顺便说一句,这可能不是做你所要求的最佳算法,但它非常简单,应该让你开始。如果您得到错误的结果或性能问题,只需获得更多有关您的案例的更好方法的信息。此链接非常有用:http://peekaboo-vision.blogspot.com.br/2013/01/machine-learning-cheat-sheet-for-scikit.html

答案 1 :(得分:0)

我不知道这是否有效,但也许您可以尝试使用变量。因此,例如,高度高(10),体重低(1),赌注厌恶度高(10),大蒜厌恶度高(10),反射率高(10)和光泽度高(10)。然后将所有这些变量相加,然后将总和放入另一个变量中。如果结束变量是例如50或更高,则可以确定它是吸血鬼,使得IS_VAMPIRE为真/ 1。你需要更多的状态来解释这种可能性,这是我想的一大段代码,但如果它有用(我不知道它是否会有效)那么它会很好。然后,在编程时,我是最无耻的新手,也许我在这里没有帮助:/