错误:形状(1,4)和(14,14)未对齐

时间:2017-12-31 05:47:45

标签: python python-3.x machine-learning scikit-learn

所以我是机器学习的新手,对这个错误感到有些困惑:

形状(1,4)和(14,14)未对齐:4(暗淡1)!= 14(暗淡0)

以下是完整错误:

文件“/Users/jim/anaconda3/lib/python3.6/site-packages/sklearn/utils/extmath.py”,第140行,在safe_sparse_dot中     return np.dot(a,b)

ValueError:形状(1,4)和(14,14)未对齐:4(暗淡1)!= 14(暗淡0)

我的测试集有4行数据和训练集14行数据,如(1,4)和(14,14)所示。至少我认为这意味着什么。

我正在尝试将简单的线性回归拟合到训练集中,如下面的代码所示:

# Fit Simple Linear Regression to Training Set
from sklearn.linear_model import LinearRegression
regressor = LinearRegression()
X_train = X_train.reshape(1,-1)
y_train = y_train.reshape(1,-1)
regressor.fit(X_train, y_train)

然后预测测试集结果:

# Predicting the Test Set Results
X_test = X_test.reshape(1,-1)
y_pred = regressor.predict(X_test)

我的代码在最后一行失败并出现上述错误:

y_pred = regressor.predict(X_test)

任何正确方向的提示都会很棒。

以下是我的整个代码示例:

# Simple Linear Regression

# Import Libraries
import numpy as np
import matplotlib.pyplot as plt
import pandas as pd

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

# Splitting the dataset into Train and Test
from sklearn.cross_validation import train_test_split
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size = 0.2, random_state = 0)

# Feature Scaling
# None

# Fit Simple Linear Regression to Training Set
from sklearn.linear_model import LinearRegression
regressor = LinearRegression()
X_train = X_train.reshape(1,-1)
y_train = y_train.reshape(1,-1)
regressor.fit(X_train, y_train)

# Predicting the Test Set Results
X_test = X_test.reshape(1,-1)
y_pred = regressor.predict(X_test)

**编辑** 我检查了X和y的形状。以下是我的输出:

dataset = pd.read_csv('NBA.csv')
X = dataset.iloc[:, 1].values
y = dataset.iloc[:, :-1].values
print(X.shape)
print(y.shape)
-->(18,)
-->(18, 1)

1 个答案:

答案 0 :(得分:1)

对于所有用法,请将reshape(1,-1)替换为reshape(-1, 1)。前者将数组转换为(1人x n 特征),后者确实( n 人x 1特征)。在这种情况下,功能 hight

如果你修改了导入部分,如下所示,不需要重新整形数组,因为它们的形状已经满足( n 人x 1特征)的形式。

# Import dataset
dataset = pd.read_csv('NBA.csv')
X = dataset.iloc[:, 1].values
y = dataset.iloc[:, 0].values

X = X.reshape(-1, 1)
y = y.reshape(-1, 1)

在sklearn的早期阶段,您可以将矢量作为输入。但最近它已经改变了,现在你需要明确指出矢量是( 1 样本x n 特征)还是( n 样本x < em> 1 功能)使用reshape或其他一些方法。