我有很多关于吸血鬼和非吸血鬼的数据。我有一个包含2000个主题的矩阵,其中包含有关该主题的统计数据。
#[height(cm), weight(kg), stake aversion, garlic aversion, reflectance, shiny, IS_VAMPIRE?]
如果IS_VAMPIRE
为1,则主题为吸血鬼,否则为0。关于如何构建一个函数来告诉我一个新主题是否是一个吸血鬼,我有几个想法,但我想知道是否有人有任何我可以追求的好主意。
答案 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。你需要更多的状态来解释这种可能性,这是我想的一大段代码,但如果它有用(我不知道它是否会有效)那么它会很好。然后,在编程时,我是最无耻的新手,也许我在这里没有帮助:/