Machine learning 如何使用Tf idf功能来训练您的模型?
我使用上面的代码来获取文本文档的功能Machine learning 如何使用Tf idf功能来训练您的模型?,machine-learning,scikit-learn,text-classification,naivebayes,tfidfvectorizer,Machine Learning,Scikit Learn,Text Classification,Naivebayes,Tfidfvectorizer,我使用上面的代码来获取文本文档的功能 from sklearn.feature_extraction.text import TfidfVectorizer tfidf = TfidfVectorizer(sublinear_tf= True, min_df = 5, norm= 'l2', ngram_range= (1,2),
from sklearn.feature_extraction.text import TfidfVectorizer
tfidf = TfidfVectorizer(sublinear_tf= True,
min_df = 5,
norm= 'l2',
ngram_range= (1,2),
stop_words ='english')
feature1 = tfidf.fit_transform(df.Rejoined_Stem)
array_of_feature = feature1.toarray()
然后我用这个代码来训练我的模型。
有人能解释一下在训练模型时如何准确地使用上述功能,因为在训练过程中,feature1变量没有在任何地方使用吗?没有,您在执行另一个转换X\u train\u计数时没有使用feature1
让我们在逻辑流程中浏览您的代码,并仅使用在特征提取和模型训练中使用的变量
进口使用
从sklearn.model\u选择导入列车\u测试\u拆分
从sklearn.feature\u extraction.text导入TfidfVectorizer
从sklearn.naive_bayes导入多项式nb
分割数据随机状态0和测试大小0.25默认值,因为您没有给出测试大小
X_序列,X_测试,y_序列,y_测试=序列测试分割df['Rejoined\u Lemmatize']],df['Product'],随机状态=0
你启动了你的变形金刚“适应”变形金刚“变形金刚”火车和“变形金刚”变形金刚测试
tfidf=TFIDFvectorierSublinear_tf=True,
最小值df=5,
范数='l2',
ngram_范围=1,2,
停止“英语”
X_列计数=tfidf.fit_转换X_列
X_测试计数=tfidf.X_测试
您启动了您的模型,并安装了X_train_counts和y_train
clf=多项式Nb
cls.fitX列车计数,y列车
根据变换后的特征进行预测
y_pred=clf.predictX_测试计数
有一种更好的方法可以使用Scikit学习API,它可以消除混淆,并帮助您避免混淆。这种方式使用管道
使用的导入:请参阅管道
从sklearn.pipeline导入管道
从sklearn.model\u选择导入列车\u测试\u拆分
从sklearn.feature\u extraction.text导入TfidfVectorizer
从sklearn.naive_bayes导入多项式nb
分割数据随机状态0和测试大小0.25默认值,因为您没有给出测试大小
X_序列,X_测试,y_序列,y_测试=序列测试分割df['Rejoined\u Lemmatize']],df['Product'],随机状态=0
抓住那些女人
tfidf_params=dictsublinear_tf=True,
最小值df=5,
范数='l2',
ngram_范围=1,2,
停止“英语”
创建一个将执行特征转换的管道,然后传递到模型
clf=管道步骤=[
“功能”,tfidf矢量器**tfidf_参数,
“模型”,多项式nb
]
使用clf作为模型,安装X_系列和y_系列
cls.fitX_列车,y_列车
预测
y_pred=clf.predictX_检验
管道在.fit中所做的是对数据进行fit_变换,然后将其传递给模型。在.predict中,它将在传递到模型之前进行转换
这种方法最好的一点是,您可以轻松地切换模型或变压器。以下是一个关于模型基线比较的示例:
用于存储结果的集合
从集合导入defaultdict
作为pd进口熊猫
从sklearn.pipeline导入管道
从sklearn.model\u选择导入列车\u测试\u拆分
从sklearn.feature\u extraction.text导入TfidfVectorizer
要测试的模型
从sklearn.linear_模型导入被动渐进分类器
从sklearn.linear_模型导入RidgeClassifierCV
从sklearn.linear_模型导入SGDClassizer
从sklearn.linear_模型导入逻辑回归CV
坚持我们的存储
基准点=默认列表
分割数据随机状态0和测试大小0.25默认值,因为您没有给出测试大小
X_序列,X_测试,y_序列,y_测试=序列测试分割df['Rejoined\u Lemmatize']],df['Product'],随机状态=0
获取变压器参数
tfidf_params=dictsublinear_tf=True,
最小值df=5,
范数='l2',
ngram_范围=1,2,
停止“英语”
我们希望完成的模型列表
型号=[
被动聚合电阻c=1e-1,最大电阻=1e3,总电阻=1e3,
RidgeClassifierCVscoring='roc_auc',cv=10,
LogisticRegressionCVcv=5,solver='saga',scoring='Accurance',random_state=1,n_jobs=-1,
SGDClassiferloss='log',随机状态=1,最大值=101,
]
培训、测试和储存每个模型
对于模型中的模型:
我们的管道已更改为接受模型
clf=管道步骤=[
“功能”,tfidf矢量器**tfidf_参数,
“模型”,模型只是模型而不是模型,正如我们在模型列表中所做的那样
]
clf.fitX_列车,y_列车
分数=clf。分数X_检验,y_检验
model_name=clf.named_steps['model'].\uuuuuu class\uuuuu.\uuuuuuu name\uuuuuu\uu单击以获取名称
model_params=clf.named_steps['model']。获取参数
printf'{model_name}得分:{score:.3f}\n'
基准点['model_name']。追加model_name
基准点[分数].附加分数
基准点[“模型”]。附录CLF
基准点[“使用参数”]。附加模型参数
最后,将基准点放在DataFrame上
型号\u df=pd.DataFramebench\u标记
现在您在DataFrame中有了经过训练的模式、它们的分数和参数。
您可以访问和使用任何生产任务单
德尔。
logistic_reg=models_df[models_df['model_name']=='LogisticRegressionCV']['model'].iloc[0]
y_preds=逻辑预测X_检验
希望这有帮助不,您在执行另一个转换X\u train\u计数时没有使用功能1
让我们在逻辑流程中浏览您的代码,并仅使用在特征提取和模型训练中使用的变量
进口使用
从sklearn.model\u选择导入列车\u测试\u拆分
从sklearn.feature\u extraction.text导入TfidfVectorizer
从sklearn.naive_bayes导入多项式nb
分割数据随机状态0和测试大小0.25默认值,因为您没有给出测试大小
X_序列,X_测试,y_序列,y_测试=序列测试分割df['Rejoined\u Lemmatize']],df['Product'],随机状态=0
你启动了你的变形金刚“适应”变形金刚“变形金刚”火车和“变形金刚”变形金刚测试
tfidf=TFIDFvectorierSublinear_tf=True,
最小值df=5,
范数='l2',
ngram_范围=1,2,
停止“英语”
X_列计数=tfidf.fit_转换X_列
X_测试计数=tfidf.X_测试
您启动了您的模型,并安装了X_train_counts和y_train
clf=多项式Nb
cls.fitX列车计数,y列车
根据变换后的特征进行预测
y_pred=clf.predictX_测试计数
有一种更好的方法可以使用Scikit学习API,它可以消除混淆,并帮助您避免混淆。这种方式使用管道
使用的导入:请参阅管道
从sklearn.pipeline导入管道
从sklearn.model\u选择导入列车\u测试\u拆分
从sklearn.feature\u extraction.text导入TfidfVectorizer
从sklearn.naive_bayes导入多项式nb
分割数据随机状态0和测试大小0.25默认值,因为您没有给出测试大小
X_序列,X_测试,y_序列,y_测试=序列测试分割df['Rejoined\u Lemmatize']],df['Product'],随机状态=0
抓住那些女人
tfidf_params=dictsublinear_tf=True,
最小值df=5,
范数='l2',
ngram_范围=1,2,
停止“英语”
创建一个将执行特征转换的管道,然后传递到模型
clf=管道步骤=[
“功能”,tfidf矢量器**tfidf_参数,
“模型”,多项式nb
]
使用clf作为模型,安装X_系列和y_系列
cls.fitX_列车,y_列车
预测
y_pred=clf.predictX_检验
管道在.fit中所做的是对数据进行fit_变换,然后将其传递给模型。在.predict中,它将在传递到模型之前进行转换
这种方法最好的一点是,您可以轻松地切换模型或变压器。以下是一个关于模型基线比较的示例:
用于存储结果的集合
从集合导入defaultdict
作为pd进口熊猫
从sklearn.pipeline导入管道
从sklearn.model\u选择导入列车\u测试\u拆分
从sklearn.feature\u extraction.text导入TfidfVectorizer
要测试的模型
从sklearn.linear_模型导入被动渐进分类器
从sklearn.linear_模型导入RidgeClassifierCV
从sklearn.linear_模型导入SGDClassizer
从sklearn.linear_模型导入逻辑回归CV
坚持我们的存储
基准点=默认列表
分割数据随机状态0和测试大小0.25默认值,因为您没有给出测试大小
X_序列,X_测试,y_序列,y_测试=序列测试分割df['Rejoined\u Lemmatize']],df['Product'],随机状态=0
获取变压器参数
tfidf_params=dictsublinear_tf=True,
最小值df=5,
范数='l2',
ngram_范围=1,2,
停止“英语”
我们希望完成的模型列表
型号=[
被动聚合电阻c=1e-1,最大电阻=1e3,总电阻=1e3,
RidgeClassifierCVscoring='roc_auc',cv=10,
LogisticRegressionCVcv=5,solver='saga',scoring='Accurance',random_state=1,n_jobs=-1,
SGDClassiferloss='log',随机状态=1,最大值=101,
]
培训、测试和储存每个模型
对于模型中的模型:
我们的管道已更改为接受模型
clf=管道步骤=[
“功能”,tfidf矢量器**tfidf_参数,
“模型”,模型只是模型而不是模型,正如我们在模型列表中所做的那样
]
clf.fitX_列车,y_列车
分数=clf。分数X_检验,y_检验
model_name=clf.named_steps['model'].\uuuuuu class\uuuuu.\uuuuuuu name\uuuuuu\uu单击以获取名称
model_params=clf.named_steps['model']。获取参数
printf'{model_name}得分:{score:.3f}\n'
基准点['model_name']。追加model_name
基准点[分数].附加分数
基准点[“模型”]。附录CLF
基准点[“使用参数”]。附加模型参数
最后,将基准点放在DataFrame上
型号\u df=pd.DataFramebench\u标记
现在您在DataFrame中有了经过训练的模式、它们的分数和参数。
您可以访问和使用任何模型。
logistic_reg=models_df[models_df['model_name']=='LogisticRegressionCV']['model'].iloc[0]
y_preds=逻辑预测X_检验
希望这有帮助非常感谢。
此外,我可以使用管道通过多个模型并测试其准确性吗?@Prayson W.DanielYes,您可以轻松地通过不同的模型并进行比较。我会编辑我的答案,包括谢谢你这么多。此外,我可以使用管道通过多个模型并测试其准确性吗?@Prayson W.DanielYes,您可以轻松地通过不同的模型并进行比较。我将编辑我的答案,将其包括在内
from sklearn.naive_bayes import MultinomialNB # Multinomial Naive Bayes on Lemmatized Text
X_train, X_test, y_train, y_test = train_test_split(df['Rejoined_Lemmatize'], df['Product'], random_state = 0)
X_train_counts = tfidf.fit_transform(X_train)
clf = MultinomialNB().fit(X_train_counts, y_train)
y_pred = clf.predict(tfidf.transform(X_test))