标签: scikit-learn

Scikit Learn TfidfVectorizer:如何获得具有最高tf-idf分数的前n个术语

我正在研究关键字提取问题.考虑一般情况

tfidf = TfidfVectorizer(tokenizer=tokenize, stop_words='english')

t = """Two Travellers, walking in the noonday sun, sought the shade of a widespreading tree to rest. As they lay looking up among the pleasant leaves, they saw that it was a Plane Tree.

"How useless is the Plane!" said one of them. "It bears no fruit whatever, and only serves to litter the ground with leaves."

"Ungrateful creatures!" said a voice from the Plane Tree. "You lie here in my cooling shade, and …
Run Code Online (Sandbox Code Playgroud)

python nlp nltk tf-idf scikit-learn

28
推荐指数
2
解决办法
2万
查看次数

scikit中的pipeline和make_pipeline有什么区别?

我从sklearn网页上得到了这个:

a)管道:使用最终估算器进行变换的管道

b)Make_pipeline:根据给定的估算器构造管道.这是Pipeline构造函数的简写.

但是当我必须使用每一个时,我仍然不明白.谁能举个例子?

python scikit-learn

28
推荐指数
1
解决办法
1万
查看次数

在苹果 m1 上安装 scipy 和 scikit-learn

在 m1 芯片上安装以下软件包:Numpy 1.21.1、pandas 1.3.0、torch 1.9.0 和其他一些软件包对我来说效果很好。在测试时它们似乎也能正常工作。但是,当我尝试通过 pip 安装 scipy 或 scikit-learn 时,会出现此错误:

错误:numpy 构建轮子失败

构建 numpy 失败

错误:无法为使用 PEP 517 的 numpy 构建轮子,并且无法直接安装

当我已经安装了 pip 的最新版本时,为什么要再次构建 Numpy?

python3.9 -m pip install ...之前的每个安装都是在配备Apple m1 芯片的 Mac OS 11.3.1 上完成的。

也许有人知道如何处理这个错误,或者这只是时间问题。

python scipy scikit-learn apple-m1

28
推荐指数
3
解决办法
5万
查看次数

如何使用弹性网?

这是关于回归正则化的初学者问题.关于弹性网和套索回归的大多数信息在线复制来自维基百科的信息或Zou和Hastie的原始2005年论文(通过弹性网进行正则化和变量选择).

简单理论的资源?是否有一个简单易懂的解释,关于它的作用,何时以及为什么需要进行重新定制,以及如何使用它 - 对于那些没有统计倾向的人?我理解原始论文是理想的来源,如果你能理解它,但是在某个地方更简单的问题和解决方案吗?

如何在sklearn中使用?有没有一步一步的例子说明为什么选择弹性网(过岭,套索,或只是简单的OLS)以及如何计算参数?sklearn上的许多示例只是将alpha和rho参数直接包含在预测模型中,例如:

from sklearn.linear_model import ElasticNet
alpha = 0.1
enet = ElasticNet(alpha=alpha, rho=0.7)
y_pred_enet = enet.fit(X_train, y_train).predict(X_test)
Run Code Online (Sandbox Code Playgroud)

但是,他们没有解释这些是如何计算的.你如何计算套索或网的参数?

python statistics regression machine-learning scikit-learn

27
推荐指数
1
解决办法
2万
查看次数

如何在Python sklearn的随机森林中解决过度拟合问题?

我正在使用python sklearn包中实现的RandomForestClassifier来构建二进制分类模型.以下是交叉验证的结果:

Fold 1 : Train: 164  Test: 40
Train Accuracy: 0.914634146341
Test Accuracy: 0.55

Fold 2 : Train: 163  Test: 41
Train Accuracy: 0.871165644172
Test Accuracy: 0.707317073171

Fold 3 : Train: 163  Test: 41
Train Accuracy: 0.889570552147
Test Accuracy: 0.585365853659

Fold 4 : Train: 163  Test: 41
Train Accuracy: 0.871165644172
Test Accuracy: 0.756097560976

Fold 5 : Train: 163  Test: 41
Train Accuracy: 0.883435582822
Test Accuracy: 0.512195121951
Run Code Online (Sandbox Code Playgroud)

我使用"价格"功能来预测"质量",这是一个序数值.在每个交叉验证中,有163个训练样例和41个测试示例.

显然,过度拟合发生在这里.那么sklearn提供的任何参数都可以用来克服这个问题吗?我在这里找到了一些参数,例如min_samples_split和min_sample_leaf,但我不太明白如何调整它们.

提前致谢!

python machine-learning decision-tree random-forest scikit-learn

27
推荐指数
1
解决办法
3万
查看次数

理解sklearn中CountVectorizer中的`ngram_range`参数

我对如何在Python中的scikit-learn库中使用ngrams感到有点困惑,具体来说,这个ngram_range参数在CountVectorizer中是如何工作的.

运行此代码:

from sklearn.feature_extraction.text import CountVectorizer
vocabulary = ['hi ', 'bye', 'run away']
cv = CountVectorizer(vocabulary=vocabulary, ngram_range=(1, 2))
print cv.vocabulary_
Run Code Online (Sandbox Code Playgroud)

给我:

{'hi ': 0, 'bye': 1, 'run away': 2}
Run Code Online (Sandbox Code Playgroud)

在我明显错误的印象中,我会得到unigrams和bigrams,就像这样:

{'hi ': 0, 'bye': 1, 'run away': 2, 'run': 3, 'away': 4}
Run Code Online (Sandbox Code Playgroud)

我正在使用这里的文档:http: //scikit-learn.org/stable/modules/feature_extraction.html

显然,我对如何使用ngrams的理解存在严重错误.也许这个论点没有效果,或者我对一个真正的二元组有一些概念上的问题!我很难过.如果有人提出建议,我会感激不尽.

更新:
我意识到了我的方式的愚蠢.我的印象是ngram_range会影响词汇,而不是语料库.

python n-gram feature-selection scikit-learn

27
推荐指数
1
解决办法
3万
查看次数

如何解读scikit的学习混淆矩阵和分类报告?

我有一个情感分析的任务,使用本该即时通讯语料库的意见有5类(very neg,neg,neu,pos,very pos),从1到5,所以我做的分类如下:

from sklearn.feature_extraction.text import TfidfVectorizer
import numpy as np
tfidf_vect= TfidfVectorizer(use_idf=True, smooth_idf=True,
                            sublinear_tf=False, ngram_range=(2,2))
from sklearn.cross_validation import train_test_split, cross_val_score

import pandas as pd

df = pd.read_csv('/corpus.csv',
                     header=0, sep=',', names=['id', 'content', 'label'])

X = tfidf_vect.fit_transform(df['content'].values)
y = df['label'].values


from sklearn import cross_validation
X_train, X_test, y_train, y_test = cross_validation.train_test_split(X,
                                                    y, test_size=0.33)


from sklearn.svm import SVC
svm_1 = SVC(kernel='linear')
svm_1.fit(X, y)
svm_1_prediction = svm_1.predict(X_test)
Run Code Online (Sandbox Code Playgroud)

然后根据指标我获得了以下混淆矩阵和分类报告,如下:

print '\nClasification report:\n', classification_report(y_test, …
Run Code Online (Sandbox Code Playgroud)

nlp machine-learning svm confusion-matrix scikit-learn

27
推荐指数
1
解决办法
3万
查看次数

使用explict(预定义)验证集进行网格搜索和sklearn

我有一个数据集,以前分为3组:训练,验证和测试.必须使用这些集合以便比较不同算法的性能.

我现在想使用验证集优化我的SVM的参数.但是,我无法找到如何明确输入验证集sklearn.grid_search.GridSearchCV().下面是我之前用于在训练集上进行K折叠交叉验证的一些代码.但是,对于这个问题,我需要使用给定的验证集.我怎样才能做到这一点?

from sklearn import svm, cross_validation
from sklearn.grid_search import GridSearchCV

# (some code left out to simplify things)

skf = cross_validation.StratifiedKFold(y_train, n_folds=5, shuffle = True)
clf = GridSearchCV(svm.SVC(tol=0.005, cache_size=6000,
                             class_weight=penalty_weights),
                     param_grid=tuned_parameters,
                     n_jobs=2,
                     pre_dispatch="n_jobs",
                     cv=skf,
                     scoring=scorer)
clf.fit(X_train, y_train)
Run Code Online (Sandbox Code Playgroud)

python validation scikit-learn cross-validation

27
推荐指数
4
解决办法
9553
查看次数

如何在scikit-learn中使用TFIDFVectorizer?

我正在尝试使用scikit-learn中的TfIDFVectorizer类来获取与某些文档不同的单词.它创建了一个tfidf矩阵,其中包含所有文档中的所有单词及其分数,但它似乎也计算了常用单词.这是我正在运行的一些代码:

vectorizer = TfidfVectorizer()
tfidf_matrix = vectorizer.fit_transform(contents)
feature_names = vectorizer.get_feature_names()
dense = tfidf_matrix.todense()
denselist = dense.tolist()
df = pd.DataFrame(denselist, columns=feature_names, index=characters)
s = pd.Series(df.loc['Adam'])
s[s > 0].sort_values(ascending=False)[:10]
Run Code Online (Sandbox Code Playgroud)

我希望这能为文档'Adam'返回一个独特单词列表,但它的作用是返回一个常用单词列表:

and     0.497077
to      0.387147
the     0.316648
of      0.298724
in      0.186404
with    0.144583
his     0.140998
Run Code Online (Sandbox Code Playgroud)

我可能不完全理解它,但据我所知,tf-idf应该在语料库中找到与一个文档不同的单词,找到在一个文档中经常出现的单词,而不是在其他文档中出现的单词.在这里,and经常出现在其他文档中,所以我不知道为什么它在这里返回一个很高的值.

我用来生成这个的完整代码就在这个Jupyter笔记本中.

当我半手动计算tf/idfs时,使用NLTK和每个单词的计算分数,我得到了适当的结果.对于'亚当'文件:

fresh        0.000813
prime        0.000813
bone         0.000677
relate       0.000677
blame        0.000677
enough       0.000677
Run Code Online (Sandbox Code Playgroud)

这看起来是正确的,因为这些是出现在"亚当"文档中的单词,但在语料库中的其他文档中却没有那么多.用于生成此代码的完整代码位于此Jupyter笔记本中.

我是否在使用scikit代码做错了什么?有没有其他方法来初始化这个类,它返回正确的结果?当然,我可以通过传递来忽略停用词stop_words = 'english',但这并不能真正解决问题,因为任何类型的常用词在这里都不应该有高分.

python nlp scikit-learn

27
推荐指数
3
解决办法
5万
查看次数

模块'sklearn'没有属性'cross_validation'

我试图将我的数据集拆分为训练和测试数据集,但我收到此错误:

X_train,X_test,Y_train,Y_test = sklearn.cross_validation.train_test_split(X,df1['ENTRIESn_hourly'])
Run Code Online (Sandbox Code Playgroud)
AttributeError                            Traceback (most recent call last)
<ipython-input-53-5445dab94861> in <module>()
----> 1 X_train,X_test,Y_train,Y_test = sklearn.cross_validation.train_test_split(X,df1['ENTRIESn_hourly'])

AttributeError: module 'sklearn' has no attribute 'cross_validation'
Run Code Online (Sandbox Code Playgroud)

我怎么处理这个?

python scikit-learn cross-validation

27
推荐指数
2
解决办法
3万
查看次数