python sklearn:" sklearn.preprocessing.normalize(X,norm =' l2')"之间有什么不同?和" sklearn.svm.LinearSVC(惩罚=' l2')"

时间:2016-06-30 07:04:36

标签: python scikit-learn

这是两种规范化方法:

1:这个在数据预处理中使用:sklearn.preprocessing.normalize(X,norm =' l2')

2:另一种方法是在分类方法中使用:sklearn.svm.LinearSVC(惩罚=' l2')

我想知道,他们之间有什么不同?并且必须在完全模型中使用这两个步骤吗?只使用一种方法就足够了吗?

1 个答案:

答案 0 :(得分:2)

这两个是不同的东西,你通常需要它们才能建立一个好的SVC模型。

1)第一个意味着为了缩放(规范化)X数据矩阵,你需要除以每列的L2范数,这就是:sqrt(sum(abs(X[:,j]).^2)),其中j是每列的你的数据矩阵X.这可以确保每列的值都不会变得太大,这使得某些算法难以收敛。

2)无论数据的缩放程度(以及数值较小)如何,仍然可能存在异常值或某些特征(j)太占优势且您的算法(LinearSVC())可能过分信任他们,而不应该相信他们。这就是 L2正则化发挥作用的地方,即除了算法最小化的功能之外,成本将应用于系数,以使它们不会变得太大。换句话说,模型的系数成为SVR成本函数的额外成本。多少费用 ?由C(L2)值决定为C*(beta[j])^2

总而言之,第一个告诉用哪个值来划分X矩阵的每一列。第二个是成本函数的系数负担应该是多少。