使用sklearn数组进行线性回归

时间:2019-01-01 18:42:46

标签: python scikit-learn

只需尝试根据以下example建立一个简单的线性回归测试即可。

这是我的代码:

# Normalize customer data
x_array = np.array(CustomerRFM['recency'])
normalized_X = preprocessing.normalize([x_array])
y_array = np.array(CustomerRFM['monetary_value'])
normalized_Y = preprocessing.normalize([y_array])

print('normalized_X: ' + str(np.count_nonzero(normalized_X)))
print('normalized_Y: ' + str(np.count_nonzero(normalized_Y)))

X_train, X_test = train_test_split(normalized_X, test_size=0.2)
Y_train, Y_test = train_test_split(normalized_Y, test_size=0.2)

print('X_train: ' + str(np.count_nonzero(X_train)))
print('Y_train: ' + str(np.count_nonzero(Y_train)))

regr = LinearRegression()
regr.fit(X_train, Y_train)

由于遇到了一个奇怪的问题,我添加了四行print()。这四行的控制台打印为:

normalized_X: 4304
normalized_Y: 4338
X_train: 0
Y_train: 0

出于某种原因,当我在训练数据和测试数据之间分配数据时,我没有值吗?

我在regr.fit()行上收到以下错误:

  

ValueError:找到了一个数组,其中包含0个样本(shape =(0,4339))   至少需要1个。

这告诉我X值有问题,但我不知道什么

更新:更改为print(array.shape)

如果我更改代码以使用

print('normalized_X: ' + str(normalized_X.shape))
print('normalized_Y: ' + str(normalized_Y.shape))

这:

print('X_train: ' + str(X_train.shape))
print('Y_train: ' + str(Y_train.shape))

我得到:

normalized_X: (1, 4339)
normalized_Y: (1, 4339)

这:

X_train: (0, 4339)
Y_train: (0, 4339)

1 个答案:

答案 0 :(得分:1)

您似乎错误地使用了preprocessing.normalize。通过将[x_array]包裹在方括号中,可以创建形状为(1, 4339)的数组。

根据docspreprocessing.normalize需要一个形状为[n_samples, n_features]的数组。在您的示例中,n_samples是1,n_features是4339,我认为这不是您想要的!然后,您要train_test_split拆分一个样本的数据集,因此可以理解地返回一个空数组。