我知道scikit-learn中的计算是基于NumPy所以一切都是矩阵或数组.
该包如何处理混合数据(数值和名义值)?
例如,产品可以具有属性"颜色"和"价格",其中颜色是名义上的,价格是数字.我注意到有一个名为'DictVectorizer'的模型来计算名义数据.例如,两个产品是:
products = [{'color':'black','price':10}, {'color':'green','price':5}]
Run Code Online (Sandbox Code Playgroud)
而'DictVectorizer'的结果可能是:
[[1,0,10],
[0,1,5]]
Run Code Online (Sandbox Code Playgroud)
如果属性'color'有许多不同的值,则矩阵将非常稀疏.长特征会降低某些算法的性能,例如决策树.
有没有办法使用标称值而无需创建虚拟代码?
我有一个代码如下:
Ne = 100;
H = rand(Ne,Ne);
g = zeros(Ne,1);
for e =1:Ne
hue = H(:,e);
ss1 = bsxfun(@times, hue', hue) .* M; % M is a Ne*Ne matrix
g(e) = sum(ss1(:));
end
Run Code Online (Sandbox Code Playgroud)
当Ne> 1000时,它运行得非常慢.
我阅读了matlab文档,并找到了permute函数是一种可能的加速方法.但我试了整整一天却失败了.
这是我的代码,我不知道出了什么问题.
C = permute(bsxfun(@times, permute(H, [1 3 2]), permute(H', [1 3 2])), [1 3 2]);
g = sum(sum(C))
Run Code Online (Sandbox Code Playgroud)