scikit学习train_test_split有2个功能

时间:2017-05-28 21:39:00

标签: python scikit-learn

我有一个scikit-learn脚本来对一些广告进行分类并预测点击率(点击率)。它适用于1个功能(文本)。不幸的是其他一些事情很重例如:位置(这将存储在order.position中)。

我在Google上搜索了很多,但我无法弄清楚如何:

  1. 添加第二个功能
  2. 将其添加到

    text=["Order now - click here"]
    
  3. 以便我可以测试,例如:如果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)
    

1 个答案:

答案 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上进行测试。