你好,社區,
這是我第一次來這裏,我有一個貧窮的英語抱歉的錯誤
我想做一個決策樹在pyspark訓練數據(當時我想評估它在測試數據)。我的目標是一個變量2值(“1”,“2”)。
首先,我對我的目標使用字符串索引器。
然後為每個分類列,我使用字符串索引器和onehotencoder
為定量列,然後我就把它們轉換VectorAssembler分類列。
後,我創建我的管道(適合它在我的完整的數據庫,然後將其轉換)。
這些步驟之後,我做一個隨機分割(培訓:70%,測試30%)和我在培訓和使用DecisionTreeClassifier我評估模型的測試數據。
但是:我不知道為什麼,有時工作,有時不喜歡。很隨機,我想不出來。
這是我的日誌錯誤:
org.apache.spark。SparkException:工作階段失敗而終止:任務13階段6389.0失敗了4次,最近的失敗:在舞台上失去了任務13.3 6389.0 (TID 85481)(10.0.3.8執行人12):org.apache.spark。SparkException:未能執行用戶定義函數(StringIndexerModelλ1837/1490332726:美元美元(字符串)=比;雙)
它是一樣的我的模型的優化……
提前感謝您的幫助! ! !祝你有美好的一天
這是我的代碼:
#我的變量:categoricalColumns = [“var1”、“var2”] numericCols = (“var3”、“var4”) #我的目標:階段= []label_stringIdx = StringIndexer (inputCol =“目標”,outputCol =“標簽”)階段+ = [label_stringIdx] #分類列:在categoricalColumns categoricalCol: StringIndexer = StringIndexer (inputCol = categoricalCol outputCol = categoricalCol + _Index)編碼器= OneHotEncoder (inputCol = categoricalCol +“_Index outputCol = categoricalCol + _classVec)階段+ = (StringIndexer,編碼器)#添加定量列:assemblerInputs = [c + c“_classVec”categoricalColumns) + numericCols #彙編:彙編= VectorAssembler (inputCols = assemblerInputs outputCol =“特性”)階段+ = =(彙編)#管道管道管道().setStages(階段)pipeline_Fited = pipeline.fit (my_database) my_database_transf = pipeline_Fited.transform (my_database)關口= my_database。列selectedcols =(“標簽”,“特性”)+關口final_dataset = my_database_transf.select (selectedcols) #隨機分割訓練和測試數據(trainingData testingData) = final_dataset.randomSplit([0.7, 0.3],種子= 100)#建築上的決策樹訓練dt = DecisionTreeClassifier (labelCol =“標簽”,featuresCol =“特性”,雜質=“基尼”,maxDepth = 4) dtModel = dt.fit (trainingData) #有時候我這裏的問題(但不是每次)#評估模型對測試數據:predict_test = dtModel.transform (testingData) dtevaluator = BinaryClassificationEvaluator (rawPredictionCol =“rawPrediction”) #默認metricName =“areaUnderROC”# evaluatorAUC.evaluate (dtModel) evaluatorAUC.evaluate (predict_test) #有時候我這裏的問題(但不是每次)打印(精度:,dtevaluator.evaluate (predict_test))打印(AUC:, BinaryClassificationMetrics (predict_test[‘標簽’,‘預測’].rdd) .areaUnderROC) #調優#為交叉驗證創建ParamGrid dtparamGrid = (ParamGridBuilder () \ .addGrid (dt。maxDepth (2、3、5)) \ .addGrid (dt。maxBins, 4、5、6、7、8]) \ .build()) #評估模型dtevaluator = BinaryClassificationEvaluator (rawPredictionCol =“rawPrediction”) #創建5倍CrossValidator dtcv = CrossValidator(估計量= dt, estimatorParamMaps = dtparamGrid,評估者= dtevaluator numFolds = 5) #運行交叉驗證cv_dtModel = dtcv.fit (trainingData) #有時候我這裏的問題(但不是每次)#預測predict_train = cv_dtModel.transform (trainingData) predict_test = cv_dtModel.transform (testingData) #評估模型evaluatorAUC = BinaryClassificationEvaluator() #默認metricName =“areaUnderROC”evaluatorACC = MulticlassClassificationEvaluator (metricName =“準確性”)Best_DT_AUC = evaluatorAUC.evaluate (predict_train) #我這裏總是有問題Best_DT_ACC = evaluatorACC.evaluate (predict_test) #我總是有問題
一個