2017-12-21 24 views
1

다른 결과를냅니다. 고정 된 random_state=42 인 경우에도 다른 결과가 나옵니다.SVM sklearn의 무작위 시드가 SVM을 실행할 때

l에는 10 개의 클래스와 200 개의 데이터 세트가 있습니다.

import numpy as np 
from sklearn.model_selection import train_test_split 
from sklearn.svm import LinearSVC 
from sklearn import svm 
import random 
random.seed(42) 

def shuffle_data(x,y): 
    idx = np.random.permutation(len(x)) 
    x_data= x[idx] 
    y_labels=y[idx] 
    return x_data,y_labels 

d,l=shuffle_data(dataset,true_labels) # dim_d=(200,2048) , dim_l=(200,) 

X_train, X_test, y_train, y_test = train_test_split(d, l, test_size=0.30, random_state=42) 

# hist intersection kernel 
gramMatrix = histogramIntersection(X_train, X_train) 
clf_gram = svm.SVC(kernel='precomputed', random_state=42).fit(gramMatrix, y_train) 
predictMatrix = histogramIntersection(X_test, X_train) 
SVMResults = clf_gram.predict(predictMatrix) 
correct = sum(1.0 * (SVMResults == y_test)) 
accuracy = correct/len(y_test) 
print("SVM (Histogram Intersection): " + str(accuracy) + " (" + str(int(correct)) + "/" + str(len(y_test)) + ")") 


# libsvm linear kernel 
clf_linear_kernel = svm.SVC(kernel='linear', random_state=42).fit(X_train, y_train) 
predicted_linear = clf_linear_kernel.predict(X_test) 
correct_linear_libsvm = sum(1.0 * (predicted_linear == y_test)) 
accuracy_linear_libsvm = correct_linear_libsvm/len(y_test) 
print("SVM (linear kernel libsvm): " + str(accuracy_linear_libsvm) + " (" + str(int(correct_linear_libsvm)) + "/" + str(len(y_test)) + ")") 

# liblinear linear kernel 

clf_linear_kernel_liblinear = LinearSVC(random_state=42).fit(X_train, y_train) 
predicted_linear_liblinear = clf_linear_kernel_liblinear.predict(X_test) 
correct_linear_liblinear = sum(1.0 * (predicted_linear_liblinear == y_test)) 
accuracy_linear_liblinear = correct_linear_liblinear/len(y_test) 
print("SVM (linear kernel liblinear): " + str(accuracy_linear_liblinear) + " (" + str(
     int(correct_linear_liblinear)) + "/" + str(len(y_test)) + ")") 

내 코드에 어떤 문제가 있습니까 : 내 데이터 세트 여기 dim_dataset=(200,2048)

의 치수 내 코드? 대신 같은 간단한 random.seed

답변

0

사용 numpy.random.seed() :

np.random.seed(42) 

Scikit 내부적으로 여전히 임의 인 NumPy와의 동작에 영향을주지 않습니다 random.seed 그렇게 만하고 임의의 숫자를 생성하는 NumPy와를 사용합니다.

더 나은 이해를 위해 다음 링크를 참조하십시오