【问题标题】:how to fixTypeError: only integer scalar arrays can be converted to a scalar index如何修复TypeError:只能将整数标量数组转换为标量索引
【发布时间】:2021-02-09 09:31:49
【问题描述】:

我在代码下面运行,而我收到一个错误,比如只有整数标量值转换为标量索引..


    from sklearn.model_selection import train_test_split 
    from sklearn.preprocessing import MinMaxScaler

      X_train, X_test, Y_train, Y_test = train_test_split(X, Y, test_size=0.1, random_state=0)
      min_max_scaler = MinMaxScaler()
      X_train = min_max_scaler.fit_transform(X_train)
      rbm_train=rbm_model_1.fit_transform(X_train )

X_train=sc.fit_transform(X_train) ----> this line causing error 
X =[[0.00000000e+00 1.76100000e+03 3.02434414e-02 ... 1.00505479e+01
  6.90634415e+00 1.13641060e+01]
 [1.00000000e+00 5.54300000e+03 3.32540176e-01 ... 9.66597699e+01
  7.81453418e+01 2.94180046e+02]
 [2.00000000e+00 3.44800000e+03 1.35616750e-01 ... 2.77757100e+01
  2.95552513e+01 6.49203725e+01]
 ...
 [5.85600000e+03 3.37100000e+03 1.99433359e-01 ... 1.82494245e+01
  2.96294395e+01 4.89311229e+01]
 [5.85700000e+03 4.59700000e+03 3.33133906e-01 ... 4.38591971e+01
  6.63558086e+01 5.51086311e+01]
 [5.85800000e+03 4.82800000e+03 3.91628974e-01 ... 6.50556871e+01
  1.02210562e+02 5.93112050e+01]]

y= [0. 0. 0. ... 1. 1. 1.]

X_train = [[-0.78210062  0.14111439 -0.3656736  ... -0.06997126 
    -0.14909763
  -0.54753418]
 [-0.51177349 -0.77928848 -0.47345634 ... -0.24668018 -0.17406007
  -0.67165109]
 [ 0.07797737 -0.54963283 -0.45941915 ... -0.26573143 -0.21174211
  -0.61647054]
 ...
 [-0.75134129 -1.29734889 -0.59546654 ... -0.328803   -0.25774714
  -0.69402226]
 [-0.18702603 -0.3460879  -0.58283771 ... -0.24237006 -0.26603587
  -0.59759254]
 [-0.11308535 -0.82498224 -0.50012261 ... -0.3001251  -0.22795859
  -0.64925682]]

这些是我之前为 X、Y、X_train 获得的输出...我有这些值,但是在将其反射转换为只有整数标量数组可以转换为标量索引时

【问题讨论】:

  • 您的数据形状可能是错误的。你能发布一个小的可重现的例子吗?

标签: python multidimensional-array scikit-learn typeerror scalar


【解决方案1】:

将其发布为答案,因为评论太长了:

我无法重现您的问题,请提供一个可运行的示例。让我们整理一下您提供的代码并删除与错误无关的任何内容:

  • 删除发生错误的行之后的所有内容 - 不相关
  • 删除该功能,不需要一个快速脚本
  • 删除args
  • 您似乎混淆了X(大写)和x(小写)。您没有说您在评论中发布的数据是存储在 X 中还是 x 中,所以根据 sklearn 约定,我将其存储在 X 中。
  • 您提供的示例数据已经是正确的形状(N 行,M 列),所以我将其放入 Scaler 中,瞧:
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler



X = [
    [-0.78210062, 0.14111439, -0.3656736, -0.06997126, -0.14909763, -0.54753418],
    [-0.51177349, -0.77928848, -0.47345634, -0.24668018, -0.17406007, -0.67165109],
    [0.07797737, -0.54963283, -0.45941915, -0.26573143, -0.21174211, -0.61647054],
    [-0.75134129, -1.29734889, -0.59546654, -0.328803, -0.25774714, -0.69402226],
    [-0.18702603, -0.3460879, -0.58283771, -0.24237006, -0.26603587, -0.59759254],
    [-0.11308535, -0.82498224, -0.50012261, -0.3001251, -0.22795859, -0.64925682],
]

Y = list(range(len(X)))

X_train, X_test, Y_train, Y_test = train_test_split(X, Y, test_size=0.10, random_state=0)

sc = StandardScaler()
X_train = sc.fit_transform(X_train)
X_test = sc.fit_transform(X_test)

这工作正常。鉴于原始问题缺少多少信息,我无法确定原始问题是什么。我的理论是,由于这条线,您传入的数据不是形状(M, N)

n_components_RBM,n_components_nn_=X,Y

这让我觉得你原来的X(大写)是一个整数而不是一个矩阵,你实际上想使用x(小写)。试着找出这个例子中的数据和你的真实数据之间的差异。

【讨论】:

  • 在您编辑的示例中,args 的值是多少?你上面还有 2 行没有做任何事情,改变它们并且它运行良好 # x, y, regularization_nn, learning_rate_RBM, learning_rate_nn, n_iter_RBM, batch_size_RBM, batch_size_nn, n_iter_nn = args # n_components_RBM, n_components_nn_ = X, Y rbm_model_1 = BernoulliRBM (n_components=2,n_iter=2,learning_rate=0.1,batch_size=1,verbose=0)
猜你喜欢
  • 2020-04-30
  • 2020-07-23
  • 1970-01-01
  • 2019-03-15
  • 2020-04-20
  • 2018-05-03
  • 2021-01-17
  • 2020-03-12
  • 1970-01-01
相关资源
最近更新 更多