2016-05-12 5 views
0

Ich mache ein Random Forest Klassifizierungsmodell auf meinem Datensatz. Es gibt einige kategorische Variablen, mit denen ich sie unter Verwendung der oneHotEncode-Methode behandle, die von spark1.6 bereitgestellt wird. Schließlich bekam ich viele Sparse Vektorenwie mit kategorialen Variablen in Spark-1.6 umgehen?

Meine Codes:

 def oneHotEncode(a: String,b:String,c:String,selectedData:DataFrame) : 

     DataFrame = { 
     val indexer = new StringIndexer().setInputCol(a).setOutputCol(b).fit(selectedData) 
     val indexed = indexer.transform(selectedData) 
     val encoder = new OneHotEncoder().setInputCol(b).setOutputCol(c) 
     val encoded = encoder.transform(indexed) 
     return encoded 
} 
var data1 = oneHotEncode("ispromoteroom","ispromoteroomIndex","ispromoteroomVec",selectedData) 

Die Frage ist, wie kann ich diese spärlichen Vektoren und anderen ursprünglichen kontinuierlichen Variablen im Datensatz in LabeledPoint Datentyp umwandeln?

Antwort

0

Ich habe diese tutorial verfolgt, es ist sehr hilfreich.

def create_labeled_point(line_split): 
    # leave_out = [41] 
    clean_line_split = line_split[0:41] 

    # convert protocol to numeric categorical variable 
    try: 
     clean_line_split[1] = protocols.index(clean_line_split[1]) 
    except: 
     clean_line_split[1] = len(protocols) 

    # convert service to numeric categorical variable 
    try: 
     clean_line_split[2] = services.index(clean_line_split[2]) 
    except: 
     clean_line_split[2] = len(services) 

    # convert flag to numeric categorical variable 
    try: 
     clean_line_split[3] = flags.index(clean_line_split[3]) 
    except: 
     clean_line_split[3] = len(flags) 

    # convert label to binary label 
    attack = 1.0 
    if line_split[41]=='normal.': 
     attack = 0.0 

    return LabeledPoint(attack, array([float(x) for x in clean_line_split])) 

training_data = csv_data.map(create_labeled_point) 
test_data = test_csv_data.map(create_labeled_point) 
Verwandte Themen