当一维数组在执行 SVM 时出现预期错误时传递了列向量 y?

A column-vector y was passed when a 1d array was expected error while doing SVM?

我正在创建一个具有一个独立变量 X 和因变量的 SVM 模型 y.I 执行特征缩放,因为两个数据变量不在同一尺度上。

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

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

下面是我收到错误的代码片段:

# 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)

我正在训练模型的文件

您有一项功能(变量),因此确实需要行 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: A column-vector y was passed when a 1d array was expected. Please change the shape of y to (n_samples, ), for example using ravel(). return f(**kwargs)

而且是DataConversionWarning,说明算法没有收敛。

替换此行:

regressor.fit(X,y)

这一行:

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