我想开始使用机器学习开发应用程序.我想对文本进行分类 – 垃圾邮件或非垃圾邮件.我有2个文件 – spam.txt,ham.txt – 每个文件包含数千个句子.如果我想使用分类器,那么让我们说LogisticRegression.
例如,正如我在互联网上看到的那样,为了适应我的模型,我需要这样做:
`lr = LogisticRegression()
model = lr.fit(X_train, y_train)`
所以这是我的问题,实际上是什么X_train和y_train?我如何从句子中获取它们?我在互联网上搜索,我不明白,这是我的最后一次电话,我对这个话题很新.谢谢!
解决方法:
根据文档(见here):
> X对应于您的浮动特征形状矩阵(n_samples,n_features)(也就是您的训练集的设计矩阵)
> y是形状的浮点目标矢量(n_samples,)(标签矢量).在您的情况下,标签0可能对应于垃圾邮件示例,1对应于火腿示例
The question is now about how to get a float feature matrix from text data.
一种常见的方案是使用tf-idf矢量化(更多关于此here),该方法可在sklearn中获得.
矢量化可以通过sklearn的Pipeline API与逻辑回归链接.
这就是代码粗略看起来的样子
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]
标签:logistic-regression,python,machine-learning