我有几个 Pandas 数据系列,想训练这些数据映射到输出 df["output"]。
到目前为止,我已将系列合并为一个,并用逗号分隔每个系列。
df = pd.read_csv("sourcedata.csv")
sample = df["catA"] + "," + df["catB"] + "," + df["catC"]
def my_tokenizer(s):
return s.split(",")
vect = CountVectorizer()
vect = CountVectorizer(analyzer='word',tokenizer=my_tokenizer, ngram_range=(1, 3), min_df=1)
train = vect.fit_transform(sample.values)
lf = LogisticRegression()
lfit = lf.fit(train, df["output"])
pred = lambda x: lfit.predict_proba(vect.transform([x]))
Run Code Online (Sandbox Code Playgroud)
问题是这是一个词袋方法,没有考虑
- 每个类别中的唯一顺序。(“橙香蕉”与“香蕉橙”不同)
-文本是一个类别的含义与另一个类别不同(一个类别中的“美国”可能意味着原产国与目的地国家/地区)
例如,整个字符串可以是:
pred("US, Chiquita Banana, China")
A 类:原产国
B 类:公司和水果类型(订单很重要)
C 类:目的地
我目前的做法是忽略任何类型的排序,并且出于某种原因还在我的功能名称中生成了额外的空格(这会使事情更加混乱):
In [1242]: vect.get_feature_names()[0:10]
Out[1242]:
[u'',
u' ',
u' ',
u' ',
u' ',
u' ',
u' US', …Run Code Online (Sandbox Code Playgroud)