【问题标题】:ValueError: Expected 2D array, got 1D array instead while fitting the modelValueError:预期的 2D 数组,在拟合模型时得到 1D 数组
【发布时间】:2020-03-03 04:05:13
【问题描述】:

我正在尝试对来自 Yellowbrick 的 load_hobbies 数据集进行建模;在将数据拆分为训练和测试数据集后,我编写了以下代码来拟合模型。但是,我收到了 ValueError 的错误:Expected 2D array, got 1D array instead。如果您的数据具有单个特征,则使用 array.reshape(-1, 1) 重塑您的数据,如果它包含单个样本,则使用 array.reshape(1, -1) 。 我不知道为什么。有人可以帮忙吗?代码如下:

from sklearn.naive_bayes import GaussianNB
from sklearn.preprocessing import LabelEncoder
from sklearn.feature_extraction.text import TfidfVectorizer
from sklearn.model_selection import train_test_split as tts


#corpus = load_hobbies()
#X = TfidfVectorizer().fit_transform(corpus.data)
#y = LabelEncoder().fit_transform(corpus.target)
#
#X_train, X_test, y_train, y_test = tts(X, y, test_size=0.2)
#
#model = MultinomialNB().fit(X_train, y_train)
#model.score(X_test, y_test)

corpus = load_hobbies()
X = corpus.data
y = corpus.target
#
X_train, X_test, y_train, y_test = tts(X, y, test_size=0.2)
#
model = GaussianNB()
model.fit(X_train, y_train)```




【问题讨论】:

  • edit您的问题包含完整的错误回溯
  • 我想问题出在标签编码器上,要转换数据,您必须将矩阵而不是数组传递给转换器,方法 .reshape(-1,1) 转换数组(n_samples ,) 转换为矩阵 (n_samples,1)。
  • 你尝试过重塑价值观吗?

标签: python machine-learning scikit-learn


【解决方案1】:

虽然您已经导入了TfidfVectorizer,但它看起来不像您使用过它。

X = corpus.data 返回一个列表,其中包含所有文档内容作为字符串。您需要使用TfidfVectorizer 将此原始文档集合转换为矩阵。

您还需要使用X.toarray() 将此稀疏矩阵转换为密集矩阵。

完成此操作后,您应该能够正确拟合模型并使用 Yellowbrick 进行可视化。

例如:

import numpy as np

from yellowbrick.datasets import load_hobbies
from yellowbrick.classifier import ClassificationReport

from sklearn.naive_bayes import GaussianNB
from sklearn.preprocessing import LabelEncoder
from sklearn.feature_extraction.text import TfidfVectorizer
from sklearn.model_selection import train_test_split as tts

# Load the data and create document vectors
corpus = load_hobbies()
tfidf = TfidfVectorizer()

X = tfidf.fit_transform(corpus.data)
y = corpus.target

# Turn sparse matrix into dense matrix
X = X.toarray()

# Split data into training and testing
X_train, X_test, y_train, y_test = tts(X, y, test_size=0.2, random_state=42)

# Instantiate the classification model and visualizer
model = GaussianNB()
visualizer = ClassificationReport(model, support=True)

visualizer.fit(X_train, y_train)        # Fit the visualizer and the model
visualizer.score(X_test, y_test)        # Evaluate the model on the test data
visualizer.show()                       # Finalize and show the figure

【讨论】:

    猜你喜欢
    • 2018-12-11
    • 2020-03-19
    • 2018-12-21
    • 2021-12-29
    • 1970-01-01
    • 2018-09-16
    • 2020-12-18
    • 2019-06-06
    相关资源
    最近更新 更多