我正在尝试训练二元分类器
我的训练数据由图表中的路径组成,每个节点都有一个名称。
例如,这可能是我的训练数据中的内容:
[" thing_a"," cats_are_cool"," blah"]可能属于0级。
订单很重要。所以[" node_a"," node_b"," node_c"]!= [" node_c"," node_b", " NODE_A"]
由于我的路径长度不同,我认为我需要哈希训练数据,因为用零填充较短的路径听起来很危险。我想使用sci kit学习功能哈希。在以下示例中,测试变量由三个路径组成:
h = FeatureHasher(n_features=2**20,non_negative=True,input_type = 'string')
test = [["unit_a","unit_b","unit_c"],["unit_c","unit_d","unit_c"],["unit_f","unit_aa"]]
X_new = h.transform(test)
print X_new.nonzero()
给了我:
(array([0, 0, 0, 1, 1, 2, 2], dtype=int32), array([ 211168, 221554, 875718, 211168, 1009892, 765479, 838855], dtype=int32))
我认为theher正在制作" unit_a" = 211168," unit_b" = 221554,......等但这不是我想要的。我希望第一个路径有一个数字,第二个路径有一个数字等。我能做些什么来实现这个目标?
再次,路径中的项目顺序很重要。
答案 0 :(得分:1)
您需要重塑test
:
In [608]:
from sklearn.feature_extraction import FeatureHasher
h = FeatureHasher(n_features=2**20,non_negative=True,input_type = 'string')
test = [["unit_a","unit_b","unit_c"],["unit_c","unit_d","unit_c"],["unit_f","unit_aa"]]
test = [[','.join(x) for x in test]] # join and reshape
X_new = h.transform(test)
test,X_new.nonzero()
Out[608]:
([['unit_a,unit_b,unit_c', 'unit_c,unit_d,unit_c', 'unit_f,unit_aa']],
(array([0, 0, 0], dtype=int32), array([231648, 410028, 497899], dtype=int32)))
我建议你保持简单,但是:
In [610]:
test = [["unit_a","unit_b","unit_c"],["unit_c","unit_d","unit_c"],["unit_f","unit_aa"]]
test_hash = [hash(tuple(x))%2**20 for x in test]
test_hash
Out[610]:
[736062, 345078, 521256]