2016-07-09 9 views
0

Scikit-Learn ist ein großartiges Python-Modul, das eine support vector machine mit vielen Algorithmen liefert. Ich habe gelernt, wie man das Modul in den letzten Tagen benutzt, und ich habe bemerkt, dass es stark auf dem separaten numpy Modul beruht.Wie bekomme ich Daten in das NDarray-Format für SKLearn?

Ich verstehe, was das Modul tut, aber ich lerne immer noch darüber, wie es funktioniert. Hier ist ein sehr kurzes Beispiel von dem, was ich verwende sklearn für:

from sklearn import datasets, svm 
import numpy 

digits = datasets.load_digits() #image pixel data of digits 0-9 as well as a chart of the corresponding digit to each image 

clf = svm.SVC(gamma=0.001,C=100) #SVC is the algorithm used for classifying this type of data 

x,y = digits.data[:-1], digits.target[:-1] #feed it all the data 
clf.fit(x,y) #"train" the SVM 

print(clf.predict(digits.data[0])) #>>>[0] 
#with 99% accuracy, all of the data consists of 1797 samples. 
#if this number gets smaller, the accuracy decreases. with 10 samples (0-9), 
#accuracy can still be up to as high as 90%. 

Die sehr einfache Klassifizierung ist. Es gibt 10 Klassen: 0,1,2,3,4,5,6,7,8,9.

den folgenden Code mit matplotlib.pyplot Verwendung:

import matplotlib.pyplot as plt #in shell after running previous code 
plt.imshow(digits.images[0],cmap=plt.cm.gray_r,interpolation="nearest") 
plt.show() 

ergibt folgendes Bild: enter image description here

das erste Pixel (von links nach rechts, von oben nach unten, wie das Lesen) dargestellt werden würde durch eine 0. Das gleiche gilt für die zweite, aber die dritte wäre durch 7 oder etwas dargestellt (Bereich ist 0 bis 15), vierte ist etwa 13. Hier sind die tatsächlichen Daten für das Bild:

[[ 0. 0. 5. 13. 9. 1. 0. 0.] 
[ 0. 0. 13. 15. 10. 15. 5. 0.] 
[ 0. 3. 15. 2. 0. 11. 8. 0.] 
[ 0. 4. 12. 0. 0. 8. 8. 0.] 
[ 0. 5. 8. 0. 0. 9. 8. 0.] 
[ 0. 4. 11. 0. 1. 12. 7. 0.] 
[ 0. 2. 14. 5. 10. 12. 0. 0.] 
[ 0. 0. 6. 13. 10. 0. 0. 0.]] 

Also meine Frage ist das: Wenn ich Textdaten klassifizieren wollte, zum Beispiel Forenbeiträge im falschen Unterforum/Kategorie, wie würde ich diese Daten in das in diesem Beispiel verwendete Zahlensystem konvertieren?

+0

Sie müssten es zu einem einzigen Vektor reduzieren. Ihr numpy Array wäre also nx64, wobei n die Anzahl der Bilder und jede Spalte ein Pixel in Ihrem Bild darstellt. Offensichtlich verlierst du mit dieser Darstellung deines Bildes eine Menge interessanter Informationen, was einer der Gründe dafür ist, warum konvolutionelle neuronale Netze im allgemeinen weit überlegen sind, wenn es um die Bildklassifizierung geht. – David

Antwort

0

Für jede Probe (z. B. jede Forum Post) müssen Sie einen Vektor haben (in Python eine Liste). Wenn Sie zum Beispiel 200 Beiträge und ihre jeweilige Kategorie haben, müssen Sie eine 200-Liste für Trainingsdaten und genau eine Liste mit 200 Elementen für jede 200-Kategorie haben. jede Liste der Ausbildungskategorie kann ein Modell sein (z. B. Bag Of Word. Siehe hier: https://en.wikipedia.org/wiki/Bag-of-words_model). Beachten Sie, dass alle Listen für das Training dasselbe Element (gleiche Dimension) haben müssen (zum Beispiel muss jede Liste 3000 Elemente haben, die jedes Element repräsentiert oder abwesend ist) Versuchen Sie, sich das anzuschauen, es ist einfach für Anfänger: https://www.kaggle.com/c/word2vec-nlp-tutorial/details/part-1-for-beginners-bag-of-words