Импортируйте CSV-файл в python, затем превратите его в массив numpy, а затем передайте его алгоритму sklearn
Алгоритм Склеарн требует функции и метки для его изучения.
У меня есть файл CSV, который содержит некоторые данные. Эти данные на самом деле представляют собой проблему с веб-сайта hackerearth, на котором участнику необходимо создать алгоритм обучения, который будет извлекать уроки из данных об огромном количестве людей из партнерской сети и об их эффективности по количеству рекламных кликов, а затем прогнозировать будущую эффективность других пользователей в партнерской сети, что позволит компания, чтобы оптимизировать эффективность своих объявлений.
Эти данные включают в себя идентификатор, дату, идентификатор сайта, идентификатор предложения, категорию, продавца, код страны, тип браузера, тип устройства и количество кликов, полученных их рекламой.
Поэтому я планирую использовать первые 7 информации в качестве своей функции и клик по объявлению в качестве метки. К сожалению, информация о коде страны, браузере и устройстве отображается в тексте (Google Chrome, Desktop), а не в целых числах, которые можно преобразовать в массив.
Q1: Есть ли способ для sklearn принимать не только пустые массивы, но и слова как функции? Я поддерживаю использовать векторизатор для этого? Если так, как бы я это сделал? Если нет, могу ли я просто заменить данные формулировки цифрами (Google Chrome заменен на 1, firefox заменен на 2) и все еще работать? (Я использую наивный алгоритм Байеса)
Q2: Подойдет ли наивный байесовский алгоритм для этой задачи? Так как в этом конкурсе от участника требуется создание программы, которая предсказывает вероятность того, что отдельные лица в партнерской сети получат клики по объявлениям, я предполагаю, что наивный Байес подойдет лучше всего.
Данные обучения: https://drive.google.com/open?id=1vWdzm0uadoro3WcpWmJ0SVEebeaSsHvr
Данные тестирования: https://drive.google.com/open?id=1M8gR1ZSpNEyVi5W19y0d_qR6EGUeGBQl
Мое грязное кодирование и ужасная попытка решить эту проблему, которая, я думаю, не сильно поможет:
from sklearn.naive_bayes import GaussianNB
import csv
import pandas as pd
import numpy as np
data = []
from numpy import genfromtxt
import pandas as pd
data = genfromtxt('smaller.csv', delimiter=',')
dat = pd.read_csv('smaller.csv', delimiter=',')
print(dat(siteid))
feature = []
label =[]
i = 1
j = 1
while i <17:
feature.append(data[i][2:8])
i += 1
while j <17:
label.append(data[i][9])
j += 1
clf = GaussianNB()
clf.fit(feature,label)
print(clf.predict([data[18][2:8]]))
print(data[18])
1 ответ
Ответ на вопрос 1: Нет. Sklearn работает только с числовыми данными. Так что вам нужно конвертировать ваш текст в числа.
Теперь для преобразования текста в числа вы можете использовать несколько подходов. Во-первых, как вы сказали, просто назначьте им номера. Но вы должны принять во внимание, показывают ли текстовые данные какой-либо порядок, например, присвоенные им числа или нет. В этом случае чаще всего используется горячее кодирование. Пожалуйста, смотрите ниже документацию по scikit-learn для этого: - http://scikit-learn.org/stable/modules/preprocessing.html
Ответ на вопрос 2: Это зависит от данных и поставленной задачи.
Ни один алгоритм не способен оптимально обрабатывать данные любого типа.
В большинстве случаев нам нужно сравнить несколько алгоритмов и посмотреть, что дает лучший результат для наших данных. Смотрите этот пример:
Даже в одном алгоритме нам нужно проверять различные значения параметров, настраивать эти значения для максимальной оценки. Это называется поиском по сетке. Смотрите этот пример:
Надеюсь, это очистит ваши сомнения. Обязательно ознакомьтесь с документацией и примерами scikit-learn:
- http://scikit-learn.org/stable/user_guide.html
- http://scikit-learn.org/stable/auto_examples/index.html
Они одни из лучших там.