【问题标题】:"Setting an array element with a sequence" numpy error“使用序列设置数组元素”numpy错误
【发布时间】:2018-04-09 22:38:40
【问题描述】:

我正在开展一个项目,该项目涉及必须使用以下形式的预处理数据。

上面也给出了数据说明。目标是预测书面数字是否与所述数字的音频匹配。首先,我将形式 (N,13) 的语音数组转换为时间轴上的均值:

这将为口语中的每个数组创建一致的 (1,13) 长度。为了在一个简单的香草算法中对此进行测试,我将两个数组压缩在一起,以便我们创建一个形式为 (45000, 2) 的数组,当我将其插入 LogisticRegression 类的 fit 函数时,它会抛出以下错误:

我做错了什么?

代码:

import numpy as np
from sklearn.linear_model import LogisticRegression

match = np.load("/srv/digits/match_train.npy")
spoken = np.load("/srv/digits/spoken_train.npy")
written = np.load("/srv/digits/written_train.npy")
print(match.shape, spoken.shape, written.shape)
print(spoken[0].shape, spoken[1].shape)

def features(signal, function):
    new = np.copy(signal)
    for i in range(len(signal)):
        new[i] = function(new[i], axis=0)
    return new

spokenMean = features(spoken, np.mean)
print(spokenMean.shape, spokenMean[0])

result = np.array(list(zip(spokenMean,written)))
print(result.shape)

X_train, X_val, y_train, y_val = train_test_split(result, match, test_size = 
0.33, random_state = 123)
model = LogisticRegression()
print(X_train.shape, y_train.shape)
model.fit(X_train, y_train)
yh_val = model.predict(X_val)

【问题讨论】:

  • spokenMean 和 ytrain 的形状是什么?
  • @Siddharth speakMean 不应该在 fit 函数中,当然应该是 X_train。 X_train 的形状为 (30150,2); y_train 的形状为 (30150,)。
  • X_train 是否仍然出错?
  • @MennoVanDijk 理想情况下,您应该创建一个人们可以运行的示例。无法从屏幕截图中复制和粘贴代码。

标签: python arrays numpy machine-learning data-science


【解决方案1】:

spokenMean 类型是 object,即它是一个包含较小一维数组的一维数组。您需要做的第一件事是convert it to a 2D float array。这对我有用:

spokenMean = features(spoken, np.mean)
spokenMean = np.vstack(spokenMean[:]).astype(np.float32)

那么,list(zip(...)) 不是连接两个数组的正确方法。相反,请致电np.concatenate

result = np.concatenate([spokenMean, written], axis=1)

这将使X_train 成为一个普通的二维数组。

【讨论】:

  • 写入的整形似乎会破坏串联,因为尺寸会发生变化。但是,当删除那行代码时,一切似乎都解决了。非常感谢您的帮助!
猜你喜欢
  • 2018-11-10
  • 1970-01-01
  • 1970-01-01
  • 2016-09-14
  • 2015-12-19
  • 2018-08-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多