Python 使用scikit时scipy.sparse矩阵的缩放问题
在使用scikit(python)解决机器学习问题时,我需要在使用SVM进行训练之前对scipy.sparse矩阵进行缩放,以获得更高的精度。但它明确提到: scale和StandardScaler仅当with_mean=False显式传递给构造函数时才接受scipy.sparse矩阵作为输入。否则将引发ValueError,因为静默居中将打破稀疏性,并且经常会由于无意中分配过多内存而导致执行崩溃。Python 使用scikit时scipy.sparse矩阵的缩放问题,python,machine-learning,scikit-learn,Python,Machine Learning,Scikit Learn,在使用scikit(python)解决机器学习问题时,我需要在使用SVM进行训练之前对scipy.sparse矩阵进行缩放,以获得更高的精度。但它明确提到: scale和StandardScaler仅当with_mean=False显式传递给构造函数时才接受scipy.sparse矩阵作为输入。否则将引发ValueError,因为静默居中将打破稀疏性,并且经常会由于无意中分配过多内存而导致执行崩溃。 这意味着我不能用零均值。那么我如何缩放这个稀疏矩阵,使它的均值和单位方差都为零。我还需要存储此“
这意味着我不能用零均值。那么我如何缩放这个稀疏矩阵,使它的均值和单位方差都为零。我还需要存储此“缩放”,以便在测试矩阵上使用相同的变换来缩放它。如果矩阵很小,可以使用
X.toarray()
对其进行加密。如果矩阵很大,那么这可能会毁掉你的内存
作为居中和缩放的替代方法,您可以尝试使用
sklearn.preprocessing.Normalizer
;这适用于频率特征(例如,在文本分类中)。我的矩阵非常大(500000 X 40000),因此我无法进行排列。规格化器会逐样本缩放,这意味着所有的数据点不会均匀缩放,因此我不能使用它。尽管如此,我还是想办法做到这一点。看来我得自己写一个脚本来完成这个任务。@Vinetchirania:数据代表什么?(无论如何,你可能无法将非线性支持向量机与如此大的数据量相匹配,因为支持向量机训练算法需要立方时间。)我尝试使用线性核支持向量机,但它在学习中花费了大量时间。所以我现在使用的是基于liblinear的LinearSVC,而不是libsvm。如果我不是说居中,只是缩放,那么这会影响精度吗?