Also versuche ich einen naiven Bayes Clasifier zu trainieren. Ging in eine Menge Ärger der Datenvorverarbeitung und ich habe jetzt zwei RDDs hergestellt:NaiveBayes Modelltraining mit separatem Trainingssatz und Daten unter Verwendung von pyspark
- Bedienungskraft eingestellt: zusammengesetzt aus einem Satz von Sparse-Vektoren;
- Etiketten: a entsprechende Liste der Etiketten (0,1) für jeden Vektor.
brauche ich so etwas wie dies auszuführen:
# Train a naive Bayes model.
model = NaiveBayes.train(training, 1.0)
aber "Training" ist ein Datensatz vom Laufen abgeleitet:
def parseLine(line):
parts = line.split(',')
label = float(parts[0])
features = Vectors.dense([float(x) for x in parts[1].split(' ')])
return LabeledPoint(label, features)
data = sc.textFile('data/mllib/sample_naive_bayes_data.txt').map(parseLine)
auf der Grundlage der Dokumentation für Python here. Meine Frage ist, dass ich nicht die Daten aus einer TXT-Datei laden will und dass ich bereits den Trainingssatz in Form von Records erstellt habe, die auf Sparse-Vektoren (RDD) und eine entsprechende etikettierte Liste abgebildet sind, wie kann ich das tun naiv-bayes laufen?
Hier ist ein Teil meiner Code:
# Function
def featurize(tokens_kv, dictionary):
"""
:param tokens_kv: list of tuples of the form (word, tf-idf score)
:param dictionary: list of n words
:return: sparse_vector of size n
"""
# MUST sort tokens_kv by key
tokens_kv = collections.OrderedDict(sorted(tokens_kv.items()))
vector_size = len(dictionary)
non_zero_indexes = []
index_tfidf_values = []
for key, value in tokens_kv.iteritems():
index = 0
for word in dictionary:
if key == word:
non_zero_indexes.append(index)
index_tfidf_values.append(value)
index += 1
print non_zero_indexes
print index_tfidf_values
return SparseVector(vector_size, non_zero_indexes, index_tfidf_values)
# Feature Extraction
Training_Set_Vectors = (TFsIDFs_Vector_Weights_RDDs
.map(lambda (tokens): featurize(tokens, Dictionary_BV.value))
.cache())
... und Etiketten ist nur eine Liste von 1 und 0. Ich verstehe, dass ich irgendwie beschrifteten Punkt irgendwie verwenden muss, aber ich bin verwechselt a, wie ... RDDs sind keine Liste, während Etiketten eine Liste ist, hoffe auf etwas, das so einfach ist, wie man einen Weg zum Erstellen von etikettierten Punktobjekten findet. Kombinieren sparse-vectors [i], entsprechende-labels [i] jeweilige Werte ... irgendwelche Ideen?