2016-09-24 39 views
1

我下載了數據。SVC.coef_中的不同數量的功能和樣本

news = datasets.fetch_20newsgroups(subset='all', categories=['alt.atheism', 'sci.space']) 
vectorizer = TfidfVectorizer() 
X = vectorizer.fit_transform(newsgroups.data) 
y = news.target 
print(X.shape) 

X的形狀爲(1786, 28382)

接下來我訓練模型,並得到了coef_形狀

clf = svm.SVC(kernel='linear', random_state=241, C = 1.0000000000000001e-05) 
clf.fit(X, y) 
data = clf.coef_[0].data 
print(data.shape) 

形狀(27189,)

爲什麼了一些功能有什麼不同?

+1

你甚至爲什麼做clf.coef_ [0] .data?這應該是一個**緩衝**,而不是你的數據。 print clf.coef_.shape – lejlot

+0

@lejlot是的,你是對的,coef_的形狀是(1,28382)。但是clf.coef_.data的形狀也是(27189)。我如何獲取所有數據? –

+1

coef_ **是您的數據。只留下數據字段:-)只需_coef [0] [i] – lejlot

回答

1

所以總之一切都很好,你的體重矩陣在clf.coef_。它具有有效的形狀,它是一個規則的numpy數組(如果數據稀疏,則爲scipy稀疏數組)。你可以對它進行所有必要的操作,索引等等。你試過的.data字段是屬性,它保存着數組的內部存儲,它可以是不同的形狀(因爲它可能會忽略一些冗餘等),但關鍵是你不應該爲你的目的使用numpy數組的這個內部屬性。它暴露在低水平的方法,而不是隻是讀出

相關問題