我想开始使用Machine Learning开发应用程序。我想对文本进行分类 - 垃圾邮件或非垃圾邮件。我有2个文件 - ag -l string1 | xargs ag -l string2 | xargs ag -l string3 | xargs ag -l string4
,spam.txt
- 每个文件包含数千个句子。如果我想使用分类器,请说ham.txt
。
例如,正如我在互联网上看到的那样,为了适应我的模型,我需要这样做:
LogisticRegression
所以这是我的问题,实际上`lr = LogisticRegression()
model = lr.fit(X_train, y_train)`
和X_train
是什么?我如何从句子中获取它们?我在互联网上搜索,我不明白,这是我的最后一次电话,我对这个话题很新。谢谢!
答案 0 :(得分:4)
根据文件(见here):
X
对应于形状(n_samples, n_features)
的浮动特征矩阵(又名训练集的设计矩阵)y
是形状(n_samples,)
的浮动目标矢量(标签矢量)。在您的情况下,标签0
可能对应于垃圾邮件示例,1
对应于火腿现在的问题是如何从文本数据中获取浮点特征矩阵。
一个常见的方案是使用 tf-idf矢量化(此here上的更多信息),sklearn
中提供了该信息。
矢量化可以通过sklearn
from itertools import chain
from sklearn.feature_extraction.text import TfidfVectorizer
from sklearn.pipeline import Pipeline
from sklearn.linear_model import LogisticRegression
import numpy as np
# prepare string data
with open('spam.txt', 'r') as f:
spam = f.readlines()
with open('ham.txt', 'r') as f:
ham = f.readlines()
text_train = list(chain(spam, ham))
# prepare labels
labels_train = np.concatenate((np.zeros(len(spam)),np.ones(len(ham))))
# build pipeline
vectorizer = TfidfVectorizer()
regressor = LogisticRegression()
pipeline = Pipeline([('vectorizer', vectorizer), ('regressor', regressor)])
# fit pipeline
pipeline.fit(text_train, labels_train)
# test predict
test = ["Is this spam or ham?"]
pipeline.predict(test) # value in [0,1]
API进行逻辑回归链接。
这就是代码看起来粗略的方式
{{1}}