日本版stack overflowでも同じ内容で質問したのですが
その後知人から,日本ならこちらの方がより回答が得られる可能性が高いと教えられたのでこちらでも質問したいと思います.
マルチポストとなってしまうこと,どうかご容赦ください
sparse行列におけるOneClassSVMの挙動を確かめてみたいと思い,datasetのirisデータを用いて
lang
1iris = datasets.load_iris() 2X = iris.data 3y = iris.target 4outlier_detection = OneClassSVM(gamma=0, nu=0.18) 5X1 = X[:120] 6X2 = X[120:] 7y1 = y[:120] 8y2 = y[120:] 9outlier_detection.fit(X1) 10print("training finish,prediction start") 11pred = outlier_detection.predict(X2) 12non_outliers_index = [i for i in range(len(pred)) if pred[i] != -1] 13print("non_sparse_non outlier:",len(non_outliers_index)) 14 15X1 = sp.csr_matrix(X1) 16X2 = sp.csr_matrix(X2) 17outlier_detection.fit(X1) 18pred = outlier_detection.predict(X2) 19non_outliers_index = [i for i in range(len(pred)) if pred[i] != -1] 20print("sparse_non outlier:",len(non_outliers_index))
という簡単な比較用プログラムを書いてみたのですが
非スパース行列においてはテストデータのうち6個の外れ値が検出されるのに対し
スパース行列においてはテストデータ30個全てが外れ値として検出されるという,明らかに異常な結果が出てしまいます.
csrだけでなく,csc,bsr,lil,dok,coo,dia形式をそれぞれ試してみたのですが,どれも同じ結果となりました.
scikit-learnのサイトではスパース行列も扱えると書いてあったのですが,なぜうまくいかないのか全く分かりません.
どこが間違っているのかご教授のほど,お願いいたします.
あなたの回答
tips
プレビュー