【发布时间】:2019-04-01 01:50:47
【问题描述】:
我正在尝试使用 Pandas 和 scikit-learn 在 Python 中执行分类。我的数据集包含文本变量、数值变量和分类变量的混合体。
假设我的数据集如下所示:
Project Cost Project Category Project Description Project Outcome
12392.2 ABC This is a description Fully Funded
493992.4 DEF Stack Overflow rocks Expired
我需要预测变量Project Outcome。这是我所做的(假设df 包含我的数据集):
-
我将类别
Project Category和Project Outcome转换为数值df['Project Category'] = df['Project Category'].factorize()[0] df['Project Outcome'] = df['Project Outcome'].factorize()[0]
数据集现在看起来像这样:
Project Cost Project Category Project Description Project Outcome
12392.2 0 This is a description 0
493992.4 1 Stack Overflow rocks 1
-
然后我使用
TF-IDF处理文本列tfidf_vectorizer = TfidfVectorizer() df['Project Description'] = tfidf_vectorizer.fit_transform(df['Project Description'])
数据集现在看起来像这样:
Project Cost Project Category Project Description Project Outcome
12392.2 0 (0, 249)\t0.17070240732941433\n (0, 304)\t0.. 0
493992.4 1 (0, 249)\t0.17070240732941433\n (0, 304)\t0.. 1
-
所以既然所有变量现在都是数值,我想我最好开始训练我的模型
X = df.drop(columns=['Project Outcome'], axis=1) y = df['Project Outcome'] X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=1) model = MultinomialNB() model.fit(X_train, y_train)
但我在尝试执行model.fit 时收到错误ValueError: setting an array element with a sequence.。当我打印X_train 时,我注意到Project Description 出于某种原因被NaN 替换了。
对此有任何帮助吗?有没有一种使用具有各种数据类型的变量进行分类的好方法?谢谢。
【问题讨论】:
-
你能不能在所有转换之前尝试做
df.isnull().sum().sum()。 -
如果这就是您的意思,则没有缺失值,它们在上述步骤之前已从数据集中删除。
标签: python pandas machine-learning scikit-learn