python - 我可以让 SVM 在大型数据集上运行得更快吗?
问题描述
我有一个大约 (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 训练时间与样本数量成二次方关系,因此对数据子集的训练应该快得多。
推荐阅读
- docker - 我的 Nginx access.log 文件中的这些条目是什么,我可以排除它们吗?
- angular - 我无法正确配置 jest 以导入模块 (setupFilesAfterEnv)
- javascript - 为什么输入日期似乎只有在您单击输入后才会触发该功能?
- tensorflow - 当数据不适合内存时,如何有效地将初始值传递给 get_variable?
- python - 用Python中的组的模式值替换缺失值过滤行组
- r - 如何在 lm 模型的 summary() 中放置一个循环?
- html - 第一列和第一行固定的可滚动表
- python - Python和C为算法返回不同的值
- ballerina - 错误:无法解析模块 'ballerina/sql'
- xml - XML to csv 做正确的 xslt