导入CSV文件到python,然后转成numpy数组,再喂给sklearn算法

Import CSV file into python, then turn it into numpy array, then feed it to sklearn algorithm

Sklearn 算法需要一个特征和一个标签才能学习。

我有一个包含一些数据的 CSV 文件。这些数据实际上是来自 hackerearth 网站的挑战,参与者需要创建一种学习算法,从联盟网络中的大量个人数据及其广告点击表现中学习,然后预测联盟网络中其他个人的未来表现,从而允许公司优化其广告效果。

这些数据中的特征包括 id、date、siteid、offerid、类别、商家、国家/地区代码、浏览器类型、设备类型以及他们的广告获得的点击次数。

https://www.hackerearth.com/practice/algorithms/string-algorithm/string-searching/practice-problems/machine-learning/predict-ad-clicks/

所以我的计划是使用前 7 个信息作为我的特征,并将广告点击作为标签。不幸的是,国家代码、浏览器和设备信息是文本(Google Chrome、桌面)而不是可以转换为数组的整数。

Q1:sklearn 有没有办法不仅接受 numpy 数组,还接受单词作为特征?我支持为此使用矢量化器吗?如果是这样,我该怎么做?如果不是,我是否可以将措辞数据替换为数字(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 的答案:不可以。Sklearn 仅适用于数值数据。所以您需要将文本转换为数字。

现在要将文本转换为数字,您可以采用多种方法。首先,正如您所说,只需为它们分配编号。但是您需要考虑文本数据是否显示任何顺序,例如分配给它们的数字。在这种情况下,最常使用的是单热编码。请参阅下面的 scikit-learn 文档: - http://scikit-learn.org/stable/modules/preprocessing.html#encoding-categorical-features

问题 2 的答案:这取决于手头的数据和任务。

没有一种算法能够以最佳方式处理每种类型的数据。

希望这能消除您的疑虑。确保阅读 scikit-learn 文档和示例:

他们是最好的之一。