【问题标题】:A column-vector y was passed when a 1d array was expected error while doing SVM?当在执行 SVM 时预期一维数组出错时,传递了列向量 y?
【发布时间】:2020-09-18 02:54:24
【问题描述】:

我正在创建一个具有一个自变量 X 和因变量 y 的 SVM 模型。我执行了特征缩放,因为两个数据变量的比例不同。

现在,当我在数据集上训练模型时,出现以下错误:

DataConversionWarning:当需要一维数组时,传递了列向量 y。请将 y 的形状更改为 (n_samples, ),例如使用 ravel()。 y = column_or_1d(y, warn=True)。

以下是我收到错误的代码 sn-p:

# Building Model on whole dataset

from sklearn.svm import SVR
regressor = SVR(kernel='rbf')
regressor.fit(X,y)

整个文件:

# Importing Libraries

import numpy as np
import matplotlib.pyplot as plt
import pandas as pd

# import data Set

dataset = pd.read_csv('Position_Salaries.csv')
X = dataset.iloc[:, 1:-1].values
y = dataset.iloc[:, -1].values

# Feature Scaling

y = y.reshape(len(y), 1)

# Feature Scaling

from sklearn.preprocessing import StandardScaler
sc_X = StandardScaler()
sc_y = StandardScaler()
X = sc_X.fit_transform(X)
y = sc_y.fit_transform(y)

# Building Model on training dataset

from sklearn.svm import SVR
regressor = SVR(kernel='rbf')
regressor.fit(X,y)

我正在训练我的模型的文件

【问题讨论】:

    标签: python machine-learning scikit-learn svm


    【解决方案1】:

    你有一个特征(变量)所以确实需要y = y.reshape(-1, 1)这一行。

    # Importing Libraries
    
    import numpy as np
    import matplotlib.pyplot as plt
    import pandas as pd
    
    # import data Set
    
    dataset = pd.read_csv('Position_Salaries.csv')
    X = dataset.iloc[:, 1:-1].values
    y = dataset.iloc[:, -1].values
    
    y = y.reshape(-1, 1)
    
    # Feature Scaling
    
    from sklearn.preprocessing import StandardScaler
    sc_X = StandardScaler()
    sc_y = StandardScaler()
    X = sc_X.fit_transform(X)
    y = sc_y.fit_transform(y)
    
    # Building Model on training dataset
    
    from sklearn.svm import SVR
    regressor = SVR(kernel='rbf')
    regressor.fit(X,y)
    

    验证模型是否已拟合:

    regressor.get_params()
    
    {'C': 1.0,
     'cache_size': 200,
     'coef0': 0.0,
     'degree': 3,
     'epsilon': 0.1,
     'gamma': 'scale',
     'kernel': 'rbf',
     'max_iter': -1,
     'shrinking': True,
     'tol': 0.001,
     'verbose': False}
    

    您收到的警告是:

    /Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages/sklearn/utils/validation.py:73: DataConversionWarning:一维数组时传递了列向量 y 预料之中。请将 y 的形状更改为 (n_samples, ),对于 使用 ravel() 的示例。返回 f(**kwargs)

    DataConversionWarning,表示算法没有收敛成功。

    【讨论】:

    • 我刚试过这个,但我仍然收到错误:raise ValueError(ValueError: Expected 2D array, got 1D array instead: array=[ 45000. 50000. 60000. 80000. 110000. 150000. 200000 . 300000. 500000. 1000000.]。如果您的数据具有单个特征,则使用 array.reshape(-1, 1) 或如果包含单个样本,则使用 array.reshape(1, -1) 重塑您的数据。
    • 请发布您的部分数据
    • 我已经在上面发布了整个数据集。
    • 感谢它与您在上面解释的警告一起工作 :)
    【解决方案2】:

    替换这一行:

    regressor.fit(X,y)
    

    用这一行:

    regressor.fit(x,np.ravel(y,order="c"))
    

    【讨论】:

      猜你喜欢
      • 2016-03-13
      • 2017-07-31
      • 2020-02-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多