2016-10-31 11 views
0

ロジスティック回帰モデルの簡単なトレーニングをしようとしています。私のトレーニングデータ、モデル、エラーメッセージを以下に示します。なぜこの 'リスト'オブジェクトに属性 '最初の'エラーがないのですか?PySpark mllibロジスティック回帰エラー "リストオブジェクトに最初に属性がありません"

train_data = numdata.collect() 
train_data[:3] 

[LabeledPoint(1.0, [2.0,36.0,0.0,100.0,100.0,38.0,0.0,100.0,95.0,100.0,100.0]), 
LabeledPoint(1.0, [0.0,77.0,16.0,100.0,99.0,86.0,1.0,99.0,100.0,99.0,95.0]), 
LabeledPoint(1.0, [0.0,22.0,0.0,100.0,95.0,21.0,1.0,95.0,100.0,100.0,100.0])] 

lrm = LogisticRegressionWithSGD.train(train_data) 

--------------------------------------------------------------------------- AttributeError Traceback (most recent call last) in() ----> 1 lrm = LogisticRegressionWithSGD.train(train_data)

C:\spark-2.0.1-bin-hadoop2.7\python\pyspark\mllib\classification.pyc in train(cls, data, iterations, step, miniBatchFraction, initialWeights, regParam, regType, intercept, validateData, convergenceTol) 319 bool(intercept), bool(validateData), float(convergenceTol)) 320 --> 321 return _regression_train_wrapper(train, LogisticRegressionModel, data, initialWeights) 322 323

C:\spark-2.0.1-bin-hadoop2.7\python\pyspark\mllib\regression.pyc in _regression_train_wrapper(train_func, modelClass, data, initial_weights) 206 def _regression_train_wrapper(train_func, modelClass, data, initial_weights): 207 from pyspark.mllib.classification import LogisticRegressionModel --> 208 first = data.first() 209 if not isinstance(first, LabeledPoint): 210 raise TypeError("data should be an RDD of LabeledPoint, but got %s" % type(first))

AttributeError: 'list' object has no attribute 'first'

答えて

2

あなたはRDD、ないリストでtrain方法を提示する必要があります。それがエラーメッセージに表示されます。

.collect()を実行すると、RDD内のデータがメモリに集められ、train_data変数が上書きされます。今はRDDではなく、メモリ内のPythonリストです。

代わりにnum_dataでトレーニングすることができます。あなたの例のように3行、上で訓練したい場合は、:

train_data = num_data.take(3) 
lrm = LogisticRegressionWithSGD.train(train_data) 
3

raise TypeError("data should be an RDD of LabeledPoint

それが何collect()戻っているので、あなたは、Python listを持っています。あなたはこれを使用RDD必要があるので、

lrm = LogisticRegressionWithSGD.train(numdata) 

それとも、私はあなたが30分の70%をそのようnumdataを分割してきたと仮定

(trainingData, testData) = numdata.randomSplit([0.7, 0.3]) 

を分割することtrainingData RDD

関連する問題