sklearn.preprocessing.normalize中的norm ='l2'对矩阵规范化有什么作用?

时间:2017-06-07 07:38:05

标签: python matrix scikit-learn

我使用scipy.sparsesA矩阵sklearn.preprocessing.normalize标准化。我阅读了该文档,但对norm='l...'不了解,所以我对其进行了测试。

norm='l1'一切正常,我得到了所有行中预期的总和结果为1。

A = np.array([[1,2,0],[0,0,3],[1,0,4]])
sA = sp.csr_matrix(A)   
normsA = normalize(sA, norm='l1', axis=0)
print normsA
print "---"
print sum(normsA)

>>(0, 0)    0.5
  (2, 0)    0.5
  (0, 1)    1.0
  (1, 2)    0.428571428571
  (2, 2)    0.571428571429
  ---
  (0, 0)    1.0
  (0, 1)    1.0
  (0, 2)    1.0

然而,当我尝试l2时,我无法找到它是如何规范化矩阵的。矩阵或转置矩阵的和不等于1。 l2在这里规范化的内容是什么?

normsA2 = normalize(sA, norm='l2', axis=0)
print sum(normsA2)
print sum(normsA2.T)

>>(0, 0)    1.41421356237
  (0, 1)    1.0
  (0, 2)    1.4
  (0, 0)    1.70710678119
  (0, 1)    0.6
  (0, 2)    1.50710678119

1 个答案:

答案 0 :(得分:1)

那是使用l2 norm(或欧几里德范数/距离),换句话说,元素的平方和总和为1。

以下输出1的预期向量:

const getApi = () => {
    let url = '/* URL */';
    return Request.get(url).then(res => res.body);
}

componentWillMount(){
   getApi().then(content => this.setState({ content }));
}