Nano Hash - криптовалюты, майнинг, программирование

Как запустить случайный классификатор в следующем случае

Я пытаюсь поэкспериментировать с анализом настроений и пытаюсь запустить случайный классификатор для следующего:

|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,

Я делаю следующее для столбца «Тема», чтобы над ним работал векторизатор подсчета:

x = train.iloc[:,0:2]
#except for alphabets removing all punctuations
x.replace("[^a-zA-Z]"," ",regex=True, inplace=True)

#convert to lower case
x = x.apply(lambda a: a.astype(str).str.lower())

x.head(2)

После этого я применяю countvectorizer к столбцу тем, конвертирую его вместе со столбцом значений и применяю случайный классификатор.

## Import library to check accuracy
from sklearn.metrics import classification_report,confusion_matrix,accuracy_score

from sklearn.feature_extraction.text import CountVectorizer
from sklearn.ensemble import RandomForestClassifier

## implement BAG OF WORDS
countvector=CountVectorizer(ngram_range=(2,2))
traindataset=countvector.fit_transform(x['Topics'])

train_set = pd.concat([x['compound'], pd.DataFrame(traindataset)], axis=1)

# implement RandomForest Classifier
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.

Моя идея такова:

Значения, которые я получил, получены в результате применения чувства вейдера, и я хочу применить его тоже — к моему случайному классификатору, чтобы увидеть влияние оценок вейдера на результат.

Может быть, есть способ умножить данные в столбце значений с помощью сгенерированных разреженных матричных данных поезда

Подскажите, пожалуйста, как быть в этом случае.


  • Пожалуйста, не форматируйте код Python как фрагменты Javascript (отредактировано). 03.12.2020
  • Привет, спасибо за ваш комментарий. Будучи новичком и изучающим технологии, не могли бы вы поделиться ценными советами о том, как делиться фрагментами кода Python в вопросе? На самом деле формат для ввода кода занимает много времени, так как нам нужно настроить пробелы, только первая строка отображается правильно. 03.12.2020

Ответы:


1

Проблема заключается в объединении другого столбца в разреженную матрицу (выход из 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   0
0   -0.99   (0, 0)\t1\n (0, 1)\t1
1   -0.98   (0, 3)\t1\n (0, 10)\t1

Можно преобразовать ваш разреженный массив в плотный массив numpy, и тогда ваш фрейм данных pandas будет работать, однако, если ваш набор данных огромен, это чрезвычайно дорого. Чтобы сохранить его как разреженное, вы можете сделать:

from scipy import sparse

train_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'])

Посетите также справочную страницу для разреженных

04.12.2020
  • Спасибо, что показали путь. Я думаю, что в коде, поскольку мы импортируем разреженный модуль из spicy, код должен быть таким: ) 05.12.2020
  • Однако, используя эту технику, я нахожу ошибки для тестового набора при попытке запустить randomclassifier.predict. 05.12.2020
  • ValueError: количество функций модели должно соответствовать входным данным. Модель n_features — 414550, а входные n_features — 110739. 05.12.2020
  • Эта ошибка генерируется 05.12.2020
  • это вообще другая проблема. вы запускаете векторизатор и преобразователь отдельно для обоих наборов данных. Поэтому, если у вас есть слова, которые присутствуют в поезде, а не в тесте, количество столбцов будет другим. Это применимо наоборот 08.12.2020
  • вы можете увидеть этот ответ, который я разместил о том, как это сделать классификация текста набора данных"> stackoverflow.com/questions/65074784/ 08.12.2020
  • Большое спасибо, что поделились этой ссылкой. Я попробую сейчас. Надеюсь, что это работает. Однако, поскольку я относительно новичок в парадигме машинного обучения, я видел некоторые упоминания о SMOTE и утечке данных — концепциях, которых я не знаю. Не могли бы вы поделиться со мной другими ссылками, чтобы прочитать об этих вещах. 08.12.2020
  • Привет! это сработало для меня. Спасибо. 08.12.2020
  • Привет @KC, по моему опыту, это действительно зависит от ваших данных, вы можете проверить пакет scikit-learn imbalanced-learn.org/stable/auto_examples/index.html 09.12.2020
  • Спасибо, что поделился! Ты действительно великолепен. Цените тот факт, что вы также подробно объясняете свои ответы, что делает их очень понятными для новичков, таких как я, чтобы следить за этим вопросом. Я желаю вам удачи в вашем путешествии, и я надеюсь узнать от вас намного больше 09.12.2020
  • Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..