我有一个scikit-learn脚本来对一些广告进行分类并预测点击率(点击率)。它适用于1个功能(文本)。不幸的是其他一些事情很重例如:位置(这将存储在order.position
中)。
我在Google上搜索了很多,但我无法弄清楚如何:
将其添加到
行text=["Order now - click here"]
以便我可以测试,例如:如果text="asdf"
和position = 3
,点击率是多少。
这是仅用于文本的工作代码,无位置:
import pandas as pd
import numpy as np
X = orders.Text
y = orders.CTR
from sklearn.cross_validation import train_test_split
X_train, X_test, y_train, y_test = train_test_split(X, y, random_state=1)
from sklearn.feature_extraction.text import CountVectorizer
vect = CountVectorizer(analyzer='word')
vect.fit(X_train)
X_train_dtm = vect.transform(X_train)
X_test_dtm = vect.transform(X_test)
from sklearn.naive_bayes import MultinomialNB
clf = MultinomialNB()
clf.fit(X_train_dtm, y_train)
text=["Order now - click here"]
v_text = vect.transform(text).toarray()
erg=clf.predict(v_text)
print(erg)
答案 0 :(得分:1)
拆分的一种方法是首先将所有数据集合并到一个数据框中。例如,如果您有以下数据
import numpy as np
import pandas as pd
text = ['first row', 'second row', 'third row', 'fourth row'] # orders.text
position = [1, 2, 3, 4] # orders.Postion
y = [1, 0, 0 ,1]
df = pd.DataFrame(np.vstack([text, position]).T, columns=['text', 'position'])
您可以使用相同的train_test_split
拆分数据框,然后您可以选择数据框的每一列并稍后处理
from sklearn.cross_validation import train_test_split
df = pd.DataFrame(np.vstack([text, position]).T, columns=['text', 'position'])
df_train, df_test, y_train, y_test = train_test_split(df, y)
然后,您可以使用CountVectorizer
from sklearn.feature_extraction.text import CountVectorizer
vect = CountVectorizer()
vect.fit(df_train.text)
X_text_train = vect.transform(df_train.text) # documents-terms matrix of training set
X_text_test = vect.transform(df_test.text) # documents-terms matrix of testing set
添加排名功能
如果您想在文档 - 术语矩阵中添加另一列位置功能,可以使用方法scipy.sparse
的{{1}}添加其他功能列,例如
hstack
然后在import scipy.sparse as sp
X_position_train = np.atleast_2d(df_train.position.astype(int)).T
X_train = sp.hstack((X_text_train, X_position_train))
X_position_test = np.atleast_2d(df_test.position.astype(int)).T
X_test = sp.hstack((X_text_test, X_position_test))
上训练您的模型,并在X_train
上进行测试。