【发布时间】:2019-01-02 03:04:48
【问题描述】:
只是尝试根据以下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)
【问题讨论】:
-
在计算非零值之前,您是否只是
print (X_train)和print (Y_train)看看里面有什么 -
@Bazingaa - 看起来像他们的两个空数组。
-
比
print(np.count_nonzero(array))更有帮助的是print(array.shape)。count_nonzero将展平尺寸并忽略零值 - 这里的两个功能会适得其反。形状是许多棘手的令人兴奋的事情发生的地方 -
但我不明白为什么归一化的 X 和 Y 都有数据
-
X_train, X_test = train_test_split(np.transpose(normalized_X), test_size=0.2) Y_train, Y_test = train_test_split(np.transpose(normalized_Y,) test_size=0.2)
标签: python scikit-learn