当前位置: 首页 > 知识库问答 >
问题:

sckit-learn fit()在对数据进行归一化后导致错误

章宏恺
2023-03-14

我一直在尝试这个:

  1. 根据数据集创建X特征和y特征
  2. 拆分数据集
  3. 使数据归一化
  4. 使用SCIKIT-LEARN中的SVR进行训练
import pandas as pd
import numpy as np
df = pd.DataFrame(np.random.rand(20,5), columns=["A","B","C","D", "E"])
a = list(df.columns.values)
a.remove("A")

X = df[a]
y = df["A"]

X_train = X.iloc[0: floor(2 * len(X) /3)]
X_test = X.iloc[floor(2 * len(X) /3):]
y_train = y.iloc[0: floor(2 * len(y) /3)]
y_test = y.iloc[floor(2 * len(y) /3):]

# normalise

from sklearn import preprocessing

X_trainS = preprocessing.scale(X_train)
X_trainN = pd.DataFrame(X_trainS, columns=a)

X_testS = preprocessing.scale(X_test)
X_testN = pd.DataFrame(X_testS, columns=a)

y_trainS = preprocessing.scale(y_train)
y_trainN = pd.DataFrame(y_trainS)

y_testS = preprocessing.scale(y_test)
y_testN = pd.DataFrame(y_testS)

import sklearn
from sklearn.svm import SVR

clf = SVR(kernel='rbf', C=1e3, gamma=0.1)

pred = clf.fit(X_trainN,y_trainN).predict(X_testN)

给出此错误:

C:\Anaconda3\lib\site-packages\pandas\core\index.py:542:FutureWarning:使用iloc时slice indexer应该是整数而不是浮点“而不是浮点”,FutureWarning)---------------------------------------------------------------------------------------------------------------------------------------------------------------

C:\anaconda3\lib\site-packages\sklearn\svm\base.py in fit(self,X,y,sample_weight)174 175seed=rnd.randint(np.iinfo('i').max)-->176fit(X,y,sample_weight,solver_type,kernel,random_seed=seed)177#请参阅此文件中对np.iinfo的另一次调用的注释178

C:\anaconda3\lib\site-packages\sklearn\svm\base.py in_dense_fit(self,X,y,sample_weight,solver_type,kernel,random_seed)229 cache_size=self.cache_size,coef0=self.coef0,230 gamma=self._gamma,epsilon=self.epsilon,-->231 max_iter=self.max_iter,random_seed=random_seed)232 233

C:sklearn.svm.libsvm.fit中的\anaconda3\lib\site-packages\sklearn\svm\libsvm.pyd(Sklearn\svm\libsvm.c:1864)()

ValueError:缓冲区的维度数错误(应为%1,得到%2)

我不知道为什么。有人能解释吗?我认为它与预处理后转换回数据流有关。

共有1个答案

萧亦
2023-03-14

这里的错误在您作为标签传递的df中:y_train

如果与示例文档版本和代码进行比较:

In [40]:

n_samples, n_features = 10, 5
np.random.seed(0)
y = np.random.randn(n_samples)
print(y)
y_trainN.values
[ 1.76405235  0.40015721  0.97873798  2.2408932   1.86755799 -0.97727788
  0.95008842 -0.15135721 -0.10321885  0.4105985 ]
Out[40]:
array([[-0.06680594],
       [ 0.23535043],
       [-1.49265082],
       [ 1.22537862],
       [-0.46499134],
       [-0.23744759],
       [ 1.40520679],
       [ 0.95882677],
       [ 1.66996413],
       [-0.37515955],
       [-0.75826444],
       [-1.45945337],
       [-0.63995369]])

因此,您可以调用squeze来生成一个序列,也可以选择df中的唯一列,以避免出现错误:

pred = clf.fit(X_trainN,y_trainN[0]).predict(X_testN)
pred = clf.fit(X_trainN,y_trainN.squeeze()).predict(X_testN)

因此,我们可以认为,对于只有一个列的df,它应该返回一些可以被强制到numpy数组中的东西,或者numpy没有正确地调用数组属性,但实际上,您应该传递一个序列或从df中选择列作为参数

 类似资料:
  • 我想用内核机对数据集进行分类。目标类有5个不同的值,我想一次性编码它。之后,我有5个目标列。我做了5次训练,每次目标列一次。现在我想分类一个新的样本。我用我得到的5个Trainig模型对样品进行了5次分类。最后,我看哪一个预测在5个预测中具有最大值,然后我根据具有最大预测的类对样本进行分类。我不确定我做的是对的。我怎样才能以正确的方式做到这一点?

  • 假设我们有这样的代码: 此代码在最新的 GCC 9.2、叮当 9.2 和 MSVC 19.22 上编译。 但当我将默认析构函数更改为GCC返回错误

  • 本文向大家介绍在机器学习中,为何要经常对数据归一化?相关面试题,主要包含被问及在机器学习中,为何要经常对数据归一化?时的应答技巧和注意事项,需要的朋友参考一下 归一化可以: 归一化后加快了梯度下降求最优解的速度(两个特征量纲不同,差距较大时,等高线较尖,根据梯度下降可能走之字形,而归一化后比较圆走直线) 归一化有可能提高精度 (一些分类器需要计算样本之间的距离,如果一个特征值域范围非常大,那么距离

  • 问题内容: 我正在与。我正在尝试向代码中添加,以在元素变为可见时通过xpath检测元素。为了获得一些Java帮助,我寻找了源代码, 但找不到它。我在发行版中找到了源代码。我下载并找到并添加到我的。在的帮助下,我只需将代码复制粘贴到我的代码中,然后更改变量名。 文档中的示例代码如下: 但是,当我实现此代码时,只需复制粘贴即可: 我在Class 上遇到错误 这是我的进口清单: 有人可以帮我吗? 更新资

  • 问题内容: 我以大熊猫数据着称。它有很多缺失。不能逐行或逐行删除。插补中位数,均值或最频繁的值也不是一种选择(因此插补和/或不幸的是,不能做到这一点)。 我碰到了一个看起来很整洁的程序包(您可以在这里找到它)。但是我有一些问题。 这是我的工作: 但是,某种程度上是单个矢量,而不是填充的数据帧。如何获得带有插补的数据框? 我意识到,需要一个。因此,我使用将转换为一个数组。 输出是缺少列标签的数据框。

  • 它实际做的是创建另一个列表,遍历旧列表,并将元素始终添加到新列表的head。 但是,当我决定重新实现这个想法而不查看这段代码时,我更改了的位置,并将其放在之后 我的问题是这真的有什么不同吗?我无法理解其中的原因,因为毕竟您在遍历旧列表。为什么要求在*temp声明后立即执行?