【问题标题】:Can I get SVMs to run faster on large data sets?我可以让 SVM 在大型数据集上运行得更快吗?
【发布时间】:2020-02-27 06:46:01
【问题描述】:

我有一个大约 (35000 x 27) 的大型数据集。我在线性和多项式回归中运行 sklearn SVM。我的运行时间有时是 30 分钟或更长时间。有没有更有效的方法来运行我的 SVM?

我尝试删除不必要的数据显示,并尝试不同的测试和训练组合,但它总是接近相同的持续时间。然而,运行高斯或“RBF”大约需要 6 分钟,但准确度要低得多。

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
from sklearn.model_selection import train_test_split
from sklearn import svm
from sklearn import metrics

proteindata = pd.read_csv("data.csv")
np.any(np.isnan(proteindata))

print(proteindata.shape)
print(proteindata.columns)  
print(proteindata.head())

X = proteindata.drop("Class", axis=1)
y = proteindata["Class"]

X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.40)

Classifier = svm.SVC(kernel='poly')
Classifier.fit(X_train, y_train)

y_pred =  Classifier.predict(X_test)

print("Accuracy:", metrics.accuracy_score(y_test, y_pred))

除了被告知手动设置伽玛之外,我没有收到任何错误。

【问题讨论】:

  • 等等,你是回归还是分类?仅供参考,SVM 仅适用于二进制类。如果您有多个目标值,Sklearn 会为每对目标 (OVO) 训练一个模型。如果您有 5 个不同的类别,则需要训练 32 个不同的分类器。这或许可以解释。
  • 这是一个 2 类分类,1 或 0。

标签: python python-3.x scikit-learn svm


【解决方案1】:

看看this answer,它涵盖了使用较小训练模型的集合来决定最佳分类器的想法。这个想法本质上是对许多较小的数据子集进行训练。采用聚合模型后,仍然会合并来自所有数据的信息,而无需一次对所有数据进行训练(尽管它不会完全等效)。由于 SVM 训练时间与样本数量成二次方关系,因此对数据子集的训练应该更快。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-04-18
    • 1970-01-01
    • 2020-08-06
    • 2020-05-25
    • 2020-04-26
    • 1970-01-01
    • 2013-10-30
    • 2015-10-19
    相关资源
    最近更新 更多