我刚刚开始使用spark并尝试运行逻辑回归。 我一直收到这个错误:
Caused by: java.lang.IllegalArgumentException: requirement failed:
Dimensions mismatch when adding new sample. Expecting 21 but got 17.
我拥有的功能数量是21,但我不确定这里的17意味着什么。不知道该怎么办? 我的代码在这里:
from pyspark.mllib.regression import LabeledPoint
from numpy import array
def isfloat(string):
try:
float(string)
return True
except ValueError:
return False
def parse_interaction(line):
line_split = line.split(",")
# leave_out = [1,2,3]
clean_line_split = line_split[3:24]
retention = 1.0
if line_split[0] == '0.0':
retention = 0.0
return LabeledPoint(retention, array([map(float,i) for i in clean_line_split if isfloat(i)]))
training_data = raw_data.map(parse_interaction)
from pyspark.mllib.classification import LogisticRegressionWithLBFGS
from time import time
t0 = time()
logit_model = LogisticRegressionWithLBFGS.train(training_data)
tt = time() - t0
print "Classifier trained in {} seconds".format(round(tt,3))
答案 0 :(得分:0)
看起来原始数据有些问题。我猜有些值没有通过 isFloat
验证。你能不能尝试在控制台上打印这些值,它可以帮助你识别错误行。
答案 1 :(得分:0)
错误来自矩阵乘法,其中尺寸不匹配。数组没有获得所有21个值。我建议你将变量设置为0,以防它们不是浮动的,就像你想要的那样(貌似)