如何在以下情况下运行随机分类器

我在尝试进行情感分析实验,并尝试为以下内容运行随机分类器:

|Topic               |value|label||Apples are great    |-0.99|0    ||Balloon is red      |-0.98|1    ||cars are running    |-0.93|0    ||dear diary          |0.8  |1    ||elephant is huge    |0.91 |1    ||facebook is great   |0.97 |0    |

在使用sklearn库将其分成训练和测试集后,

我对Topic列进行了以下处理,以便计数向量化器可以使用它:

x = train.iloc[:,0:2]#移除所有除字母外的标点符号x.replace("[^a-zA-Z]"," ",regex=True, inplace=True)#转换为小写x = x.apply(lambda a: a.astype(str).str.lower())x.head(2)

之后,我对topics列应用了计数向量化器,将其与value列一起转换,并应用随机分类器。

## 导入库以检查准确性from sklearn.metrics import classification_report,confusion_matrix,accuracy_scorefrom sklearn.feature_extraction.text import CountVectorizerfrom sklearn.ensemble import RandomForestClassifier## 实现词袋模型countvector=CountVectorizer(ngram_range=(2,2))traindataset=countvector.fit_transform(x['Topics'])train_set = pd.concat([x['compound'], pd.DataFrame(traindataset)], axis=1)# 实现随机森林分类器randomclassifier=RandomForestClassifier(n_estimators=200,criterion='entropy')randomclassifier.fit(train_set,train['label'])

但我收到了以下错误:

TypeError                                 Traceback (most recent call last)TypeError: float() argument must be a string or a number, not 'csr_matrix'The above exception was the direct cause of the following exception:ValueError                                Traceback (most recent call last)<ipython-input-41-7a1f9b292921> in <module>()      1 # implement RandomForest Classifier      2 randomclassifier=RandomForestClassifier(n_estimators=200,criterion='entropy')----> 3 randomclassifier.fit(train_set,train['label'])4 frames/usr/local/lib/python3.6/dist-packages/numpy/core/_asarray.py in asarray(a, dtype, order)     83      84     """---> 85     return array(a, dtype, copy=False, order=order)     86      87 ValueError: setting an array element with a sequence.

我的想法是:

我收到的值来自于应用vader-sentiment,我希望将其也应用到我的随机分类器中,以查看vader分数对输出的影响。

也许有办法将value列中的数据与生成的稀疏矩阵traindata相乘

请问有人可以告诉我如何在这种情况下操作吗?


回答:

问题在于将另一列连接到稀疏矩阵(countvector.fit_transform的输出)。为了简化起见,假设你的训练数据是:

x = pd.DataFrame({'Topics':['Apples are great','Balloon is red','cars are running',                           'dear diary','elephant is huge','facebook is great'],                  'value':[-0.99,-0.98,-0.93,0.8,0.91,0.97,],                  'label':[0,1,0,1,1,0]})

你可以看到这会产生一些奇怪的结果:

countvector=CountVectorizer(ngram_range=(2,2))traindataset=countvector.fit_transform(x['Topics'])train_set = pd.concat([x['value'], pd.DataFrame(traindataset)], axis=1)train_set.head(2)    value   00   -0.99   (0, 0)\t1\n (0, 1)\t11   -0.98   (0, 3)\t1\n (0, 10)\t1

虽然可以将你的稀疏矩阵转换为密集的numpy数组,然后你的pandas数据框可以正常工作,但如果你的数据集很大,这将非常耗费资源。为了保持稀疏性,你可以这样做:

from scipy import sparsetrain_set = scipy.sparse.hstack([sparse.csr_matrix(x['value']).reshape(-1,1),traindataset])randomclassifier=RandomForestClassifier(n_estimators=200,criterion='entropy')randomclassifier.fit(train_set,x['label'])

也请查看稀疏矩阵的帮助页面

Related Posts

使用LSTM在Python中预测未来值

这段代码可以预测指定股票的当前日期之前的值,但不能预测…

如何在gensim的word2vec模型中查找双词组的相似性

我有一个word2vec模型,假设我使用的是googl…

dask_xgboost.predict 可以工作但无法显示 – 数据必须是一维的

我试图使用 XGBoost 创建模型。 看起来我成功地…

ML Tuning – Cross Validation in Spark

我在https://spark.apache.org/…

如何在React JS中使用fetch从REST API获取预测

我正在开发一个应用程序,其中Flask REST AP…

如何分析ML.NET中多类分类预测得分数组?

我在ML.NET中创建了一个多类分类项目。该项目可以对…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注