2012-12-06 19 views
5

現在、テキストを分類しようとしています。私のデータセットが大きすぎて、hereと示唆されているように、私は疎な行列を使う必要があります。私の質問は今、スパース行列に要素を追加する正しい方法は何ですか?たとえば、私が入力した行列Xがあるとしましょう。SciPy NumPyとSciKitは学習し、疎な行列を作成します

X = np.random.randint(2, size=(6, 100)) 

今、この行列Xはndarray(またはそのような何か)のndarrayのように見えます。

私は

X2 = csr_matrix(X) 

をすれば、私は疎行列を持っていますが、どのように私はsparce行列に別の要素を追加することができますか? たとえば、この密な要素:[1,0,0,0,1,1,1,0、...、0,1,0]をスパースベクトルに追加するには、スパース入力行列にどのように追加しますか?

は(ところで、私のpython、scipyのダウンロード、numpyの、scikit ...すべてのものに非常に新しいです)

+2

あなたは本当にこれを読んでください:http://scikit-learn.org/dev/auto_examples/dvument_classification_20newsgroups.html – zenpoy

+0

これは私の2日目のpythonでの作業です。これは2日目の読書のために少し上です。私はそれも見つかりましたbtw – Ojtwist

+2

いくつかのことは単に自分の時間を取る。おそらく、Python、Numpy、およびScipyに関するチュートリアルをやっていくうちに、ある程度の時間を費やすべきでしょう。たとえば、他の質問の答えでは、私はあなたにいくつかのリンクを指していました。そして、先輩はあなたに別のリンクをくれました。私はあなたが私が他の人に答えた後すぐにこの質問を投稿したので、あなたはそれらのリンクを読んでいないと仮定します。 – HerrKaputt

答えて

14

Scikit-学ぶあなたが本当にをしようとする前に読むべき偉大なチュートリアルで、偉大なドキュメントを持っていますそれを自分で作りなさい。 This最初に、テキストを分類する方法を段階的に説明しています。

疎な表現については、thisセクションで特に注意してください。一般的に、svmを線形カーネルで使用したい場合、大量のデータを使用する場合は、LinearSVC(Liblinearに基づいています)が優れています。

あなたの質問について - 私は2つのスパース行列を連結する方法がたくさんあると確信しています(これは他の方法でgoogleで探すべきです)。 csr_matrixから疎な行列の葯型であるcoo_matrixに変換:Is there an efficient way of concatenating scipy.sparse matrices?

EDIT:二つの行列(又はマトリックスと1つのdimenesional行列である配列)の一般的な考え方は、X1.dataX2.dataを連結した場合に、そのindicesindptr S(又はrowcolを操作することを連結coo_matrix)が正しい場所を指すようにします。いくつかの疎な表現は特定の操作には優れており、他の操作にはより複雑なものもありますので、csr_matrixを読んで、これが最善の表現であるかどうかを確認してください。しかし、私は上記のチュートリアルから始めることを本当にお勧めします。

+1

SVMを本当に大量のデータセットに収めるには、 'SGDClassifier'がさらに優れています。デフォルトの設定では、リニアSVMに近似します。 –

関連する問題