2016-10-31 3 views
0

로지스틱 회귀 모델에 대한 간단한 교육을 시도하고 있습니다. 내 훈련 데이터, 모델 및 오류 메시지는 다음과 같습니다. 이 'list'객체에 'first'오류가없는 이유는 무엇입니까?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가 아니라 메모리 내 파이썬 목록입니다.

대신 num_data에 직접 훈련 할 수 있습니다. 당신이 당신의 예에서와 같이, 3 행에 훈련을하려는 경우 또는 :

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

raise TypeError("data should be an RDD of LabeledPoint

을 당신은 파이썬 list가 무엇 collect() 반환하기 때문에이있다. 당신은 너무 사용 RDD 필요하므로

lrm = LogisticRegressionWithSGD.train(numdata) 

또는, 당신이 70/30 %에 대한과 같이 numdata을 분할 한 가정

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

을 분할하는 trainingData RDD