0

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

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

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

4

2 回答 2

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

于 2013-11-09T00:22:30.407 回答
0

我不知道这是否可行,但也许你可以尝试使用变量。因此,例如,说 hight 高 (10),weight 低 (1),stake 厌恶高 (10),大蒜厌恶高 (10),反射率高 (10),光泽度高 (10)。然后将所有这些变量相加,然后将总和放入另一个变量中。例如,如果最终变量为 50 或更高,则您确定它是吸血鬼,使 IS_VAMPIRE 为 true/1。你需要更多的状态来解释这种可能性,我认为这是一个很大的代码块,但如果它有效(我不知道它是否会)那么它会很好。再说一次,在编程方面,我是最笨的菜鸟,也许我在这里帮不上忙:/

于 2013-11-09T00:28:45.970 回答