2017-02-28 123 views
0

我是SVM领域的新手,并且正在尝试通过教程来教导自己。我最近试图创建一个样本svm测试,但是,run-time似乎是无止境的。考虑到我的dataframe有7976行,典型的处理时间是多少?使用SVM处理时间

import numpy as np 
from sklearn import svm 
from sklearn import preprocessing 
import pandas as pd 
import os 

directory_name = 'D:\Timothy\Practice SVM\Data' 
name_of_file = 'Sample_SVM.csv' 

df_start = pd.read_csv(os.path.join(directory_name, name_of_file)) 
df_cleaned = df_start.dropna() 

X = df_cleaned.ix[1:8000, 'Sun'].as_matrix() 
X = X.reshape((7976,1)) #unsure if this step is needed 
X_test = df_cleaned.ix[8000:9913, 'Sun'].as_matrix() 

y = df_cleaned.ix[1:8000, 'Meter_Total'].as_matrix() 
y_test = df_cleaned.ix[8000:9913, 'Meter_Total'].as_matrix() 

model = svm.SVC(kernel='linear', C=1, gamma=1) 

model.fit(X,y) 
model.score(X, y) 

predicted = model.predict(X_test) 
+0

您的数据是否正常化? – hashcode55

回答

0

假设:当你使用术语“运行时”也可以是“训练时间”或“测试时间”(在给定的程序),但因为你说,数据帧有7976行,我我会考虑它作为训练时间。

考虑到线性支持向量机,在训练时必须通过求解二次问题来估计向量w和偏差b,从而找到支持向量。 一般来说,测试一个人是否已经达到最佳解决方案需要n点产品的顺序,并且解决二次问题涉及'内核'矩阵的倒置,这是n 3的顺序。 (这里,n是训练集中样本的数量)。但是,几乎不需要估计最佳解决方案;并且线性SVM达到一定水平的泛化误差的训练时间实际上随着训练集大小增加而减小。一般来说,这很大程度上取决于所使用的技术,但是除了最先进的线性支持向量机或近似解算器之外,所有培训时间都是n 2的阶数。

准确地说,对于线性SVM(如liblinear)的scikit-learn软件包,(n_sample * n_features)也注意到强正则化(低C)使得它更快地收敛。