Inputデータの次元が合わないとエラーが出たとき
まず前提のimportが下記。
import pandas as pd from sklearn.model_selection import train_test_split from sklearn.svm import SVC
df = pd.read_csv("Wholesale customers data.csv") X = pd.DataFrame(df, columns=["Fresh", "Milk","Grocery","Frozen","Detergents_Paper","Delicassen"]) target = pd.DataFrame(df, columns=['Channel']) X_train, X_test, y_train, y_test = train_test_split(X.values, target.values) clf = SVC(kernel = 'linear') clf.score(X_test, y_test)
これを実行すると下記のエラーが出る。
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(). y = column_or_1d(y, warn=True)
y を(n_samples, ) のshapeにしろと。いまはどうなっているかというと"y_train.ndim"実行すると"2"となる。2次元になっているので、次元を削除する必要がある。というわけで下記。
y_train=np.reshape(y_train,(-1)) y_test=np.reshape(y_test,(-1))
これで(n_samples, )の形式になる。ちなみに(-1)はもとの行数をいれてもいい。上記例なら、y_trainは330で、y_testは110でもいいけど、これは変わる可能性もあるし、いちいちカウントするのめんどくらいから全部というのを(-1)で指定。
逆に次元を増やしたいとき(こちらのほうをやる場面のほうが多いらしい)は下記。これでさっき1次元になったのが2次元に。(-1,1,1)とすればが3次元。
y_train=np.reshape(y_test,(-1,1)) y_test=np.reshape(y_test,(-1,1))