這篇文章是跟隨以下職位:檢查如果我的數據是線性可分
https://cs.stackexchange.com/questions/70395/what-is-the-effect-of-hidden-layer-size
我想看看我的數據是線性可分與否。根據我在上面鏈接的帖子中收到的評論,我決定對我的數據運行hard-SVM以查看分類結果。我的輸入數據X是(10000,128)的矩陣,輸出/目標/類是(10000,10)。我有10個類的範圍從1到10.
使用以下代碼,我試過LogisticRegression(),svm.LinearSVC(C = 1,loss ='hinge')和svm.SVC(kernel ='linear', C = 1):
dataframe = read_csv('data.txt')
array = dataframe.values
X = array[:, 0:128]
y = array[:,-1]
plt.hist(y, bins='auto') # plt.hist passes it's arguments to np.histogram
plt.title("Histogram with 'auto' bins")
plt.show()
models = []
models.append(('LR', LogisticRegression()))
models.append(('LSVM', svm.LinearSVC(C=1, loss='hinge')))
models.append(('LSVM2', svm.SVC(kernel='linear', C=1)))
results=[]
names=[]
scoring = 'accuracy'
for name, model in models:
kfold = KFold(n_splits=10, random_state=7)
cv_results = cross_val_score(model, X, y, cv=kfold, scoring=scoring)
results.append(cv_results)
names.append(name)
msg = "%s: %f (%f)" % (name, cv_results.mean(), cv_results.std())
print(msg)
和這裏的結果:
LR: 0.613360 (0.019632)
LSVM: 0.307829 (0.020123)
LSVM2: 1.000000 (0.000000)
我有2個問題:
(1)是我的數據線性可分?
(2)LSVM2的結果奇怪嗎? 爲了這個,我還用於
models.append(('RBFSVM', svm.SVC(kernel='rbf', gamma=0.7, C=1)))
models.append(('POLYSVM', svm.SVC(kernel='poly', degree=3, C=1)))
並取得了以下:
RBFSVM: 0.797680(.015187)
POLYSVM: 0.100011(0.008113)
可以請你幫我獲得更多的直覺?
感謝,
感謝您的回答@lejlot。對你來說一個簡短的問題(或者因爲我不是這方面的專家,可能是一個愚蠢的問題):爲什麼我的數據是一維的?我有128個功能輸入。會在我的數據維度中考慮嗎? – tafteh
我校正的輸入要素的大小,X將其錯誤地報告: 「X是(10000,128)的矩陣和輸出/目標/類是(10000,10)...」 這對子級變更回答與否? – tafteh
這隻會改變最後一點,沒有別的(現在我已經刪除,因爲更新後它不再適用)。 – lejlot