【问题标题】:scikit learn train_test_split with 2 featuresscikit 学习 train_test_split 具有 2 个功能
【发布时间】:2017-05-31 14:14:03
【问题描述】:

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

我在谷歌上搜索了很多,但我不知道如何:

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

    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)

【问题讨论】:

    标签: python scikit-learn


    【解决方案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.sparsehstack 方法添加额外的特征列,例如

    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 上训练您的模型并在 X_test 上进行测试。

    【讨论】:

    • 对不起,它不工作。它给了我 NameError: name 'text_train' is not defined
    • 啊,不错。我刚刚修正了错别字
    • 我又修好了,你能检查一下吗?
    • 好的,再次感谢。现在它运行没有错误。但是我现在如何预测某些内容,例如 text=["Order now - click here"] Position=1 #return the expected ctr.
    • 是的。您可以将输入转换为矢量,例如X_pred = sp.hstact((vect.tranform(text), Position)) 然后将其放入训练有素的分类器中。
    猜你喜欢
    • 1970-01-01
    • 2018-09-24
    • 2018-08-24
    • 2016-12-11
    • 2020-11-15
    • 2017-01-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多