2017-02-28 48 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)使得它更快地收斂。