标签: scikit-learn

RidgeClassifierCV的评分函数

我正在尝试在scikit-learn中为RidgeClassifierCV实现自定义评分功能.这涉及将自定义评分函数作为score_func初始化RidgeClassifierCV对象时传递.我希望score_func将分类值作为y_true和的输入y_pred.但是,相反,浮点值将作为y_true和传入y_pred.y向量的大小等于类的数量乘以训练样本的数量,而不是简单地具有长度等于训练样本的数量的y向量.

我可以以某种方式强制将分类预测传递到自定义评分函数,还是我必须处理原始权重?如果我必须直接处理原始权重,那么输出向量切片中最大值的索引是否等于预测类?

python scikit-learn

36
推荐指数
1
解决办法
1300
查看次数

scikit-learn中的TfidfVectorizer:ValueError:np.nan是一个无效的文档

我正在使用scikit中的TfidfVectorizer学习从文本数据中提取一些特征.我有一个带有分数的CSV文件(可以是+1或-1)和一个评论(文本).我将这些数据导入DataFrame,以便运行Vectorizer.

这是我的代码:

import pandas as pd
import numpy as np
from sklearn.feature_extraction.text import TfidfVectorizer

df = pd.read_csv("train_new.csv",
             names = ['Score', 'Review'], sep=',')

# x = df['Review'] == np.nan
#
# print x.to_csv(path='FindNaN.csv', sep=',', na_rep = 'string', index=True)
#
# print df.isnull().values.any()

v = TfidfVectorizer(decode_error='replace', encoding='utf-8')
x = v.fit_transform(df['Review'])
Run Code Online (Sandbox Code Playgroud)

这是我得到的错误的追溯:

Traceback (most recent call last):
  File "/home/PycharmProjects/Review/src/feature_extraction.py", line 16, in <module>
x = v.fit_transform(df['Review'])
 File "/home/b/hw1/local/lib/python2.7/site-   packages/sklearn/feature_extraction/text.py", line 1305, in fit_transform
   X = super(TfidfVectorizer, self).fit_transform(raw_documents)
 File "/home/b/work/local/lib/python2.7/site-packages/sklearn/feature_extraction/text.py", line 817, in fit_transform …
Run Code Online (Sandbox Code Playgroud)

python machine-learning tf-idf pandas scikit-learn

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

如何预测scikit-learn中的时间序列?

Scikit-learn采用了一种非常方便的方法fitpredict方法.我有适合fit和的格式的时间序列数据predict.

例如,我有以下内容Xs:

[[1.0, 2.3, 4.5], [6.7, 2.7, 1.2], ..., [3.2, 4.7, 1.1]]
Run Code Online (Sandbox Code Playgroud)

和相应的ys:

[[1.0], [2.3], ..., [7.7]]
Run Code Online (Sandbox Code Playgroud)

这些数据具有以下含义.存储的值ys形成时间序列.值Xs是对应的时间相关"因子",已知这些因素对值ys(例如:温度,湿度和大气压力)有一些影响.

现在,当然,我可以使用fit(Xs,ys).但后来我得到了一个模型,其中未来的值ys仅依赖于因子,并且不依赖于先前的Y值(至少直接),这是模型的限制.我想有其中一个模型Y_n也依赖Y_{n-1}Y_{n-2}等.例如,我可能想使用指数移动平均线作为模型.在scikit-learn中最优雅的方法是什么

添加

正如评论中提到的那样,我可以Xs通过添加来扩展ys.但这种方式有一些局限性.例如,如果我将最后5个值添加y为5个新列X,则有关时间排序的信息ys将丢失.例如,没有迹象表明X第5列中的值跟随第4列中的值,依此类推.作为一个模型,我可能希望得到最后五个的线性拟合,ys并使用找到的线性函数进行预测.但如果我在5列中有5个值,那就不是那么简单了.

增加2

为了使我的问题更加清楚,我想举一个具体的例子.我想有一个"线性"模型y_n = c + k1*x1 + k2*x2 + k3*x3 + k4*EMOV_n,其中EMOV_n只是一个指数移动平均线.怎样,我可以在scikit-learn中实现这个简单的模型吗?

python machine-learning time-series scikit-learn

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

Sklearn SGDClassifier部分适合

我正在尝试使用SGD对大型数据集进行分类.由于数据太大而无法放入内存,我想使用partial_fit方法来训练分类器.我选择了适合内存的数据集样本(100,000行)来测试拟合partial_fit:

from sklearn.linear_model import SGDClassifier

def batches(l, n):
    for i in xrange(0, len(l), n):
        yield l[i:i+n]

clf1 = SGDClassifier(shuffle=True, loss='log')
clf1.fit(X, Y)

clf2 = SGDClassifier(shuffle=True, loss='log')
n_iter = 60
for n in range(n_iter):
    for batch in batches(range(len(X)), 10000):
        clf2.partial_fit(X[batch[0]:batch[-1]+1], Y[batch[0]:batch[-1]+1], classes=numpy.unique(Y))
Run Code Online (Sandbox Code Playgroud)

然后我用相同的测试集测试两个分类器.在第一种情况下,我得到100%的准确度.据我了解,SGD默认在训练数据上传递5次(n_iter = 5).

在第二种情况下,我必须通过60次数据才能达到相同的准确度.

为什么会出现这种差异(5对60)?或者我做错了什么?

python machine-learning gradient-descent scikit-learn

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

roc_auc_score()和auc()的结果不同

我无法理解scikit-learn 之间roc_auc_score()和之间的区别(如果有的话)auc().

我想用不平衡的类来预测二进制输出(Y = 1时约为1.5%).

分类

model_logit = LogisticRegression(class_weight='auto')
model_logit.fit(X_train_ridge, Y_train)
Run Code Online (Sandbox Code Playgroud)

罗克曲线

false_positive_rate, true_positive_rate, thresholds = roc_curve(Y_test, clf.predict_proba(xtest)[:,1])
Run Code Online (Sandbox Code Playgroud)

AUC的

auc(false_positive_rate, true_positive_rate)
Out[490]: 0.82338034042531527
Run Code Online (Sandbox Code Playgroud)

roc_auc_score(Y_test, clf.predict(xtest))
Out[493]: 0.75944737191205602
Run Code Online (Sandbox Code Playgroud)

有人可以解释这个区别吗?我以为两者都只计算ROC曲线下的面积.可能是因为数据集不平衡但我无法弄清楚原因.

谢谢!

python machine-learning scikit-learn

35
推荐指数
3
解决办法
4万
查看次数

scikit-learn会利用GPU吗?

在tensroflow中阅读scikit-learn的实现:http://learningtensorflow.com/lesson6/ 和scikit-learn:http://scikit-learn.org/stable/modules/generated/sklearn.cluster.KMeans.html 我是努力决定使用哪种实现.

scikit-learn作为tensorflow docker容器的一部分安装,因此可以使用任一实现.

使用scikit-learn的原因:

scikit-learn包含比tensorflow实现更少的锅炉板.

使用tensorflow的原因:

如果在Nvidia GPU上运行算法wilk并行运行,我不确定scikit-learn是否会利用所有可用的GPU?

阅读https://www.quora.com/What-are-the-main-differences-between-TensorFlow-and-SciKit-Learn

TensorFlow更低级别; 基本上,乐高积木可以帮助您实现机器学习算法,而scikit-learn为您提供现成的算法,例如,分类算法,如SVM,随机森林,Logistic回归等等.如果你想实现深度学习算法,TensorFlow真的很棒,因为它可以让你利用GPU进行更有效的训练.

这个陈述重新强化了我的断言"scikit-learn包含的锅炉板比tensorflow实现更少",但也暗示scikit-learn不会利用所有可用的GPU?

python k-means scikit-learn tensorflow

35
推荐指数
3
解决办法
4万
查看次数

在“Keras”分类中使用“sklearn”库中的计算类权重函数问题(Python 3.8,仅在 VS 代码中)

我编写的分类器脚本运行良好,最近在配件中添加了重量平衡。由于我使用“sklearn”库添加了重量估计函数,因此出现以下错误:

compute_class_weight() takes 1 positional argument but 3 were given
Run Code Online (Sandbox Code Playgroud)

根据文档,此错误没有意义。该脚本应该有三个输入,但不确定为什么它说只需要一个变量。完整的错误和代码信息如下所示。显然,这仅在 VS 代码中失败。我在 Jupyter 笔记本上进行了测试,工作正常。所以这似乎是 VS code 编译器的问题。有人注意到吗?(我正在使用 Python 3.8 和其他最新的其他库)

from sklearn.utils import compute_class_weight

train_classes = train_generator.classes

class_weights = compute_class_weight(
                                        "balanced",
                                        np.unique(train_classes),
                                        train_classes                                                    
                                    )
class_weights = dict(zip(np.unique(train_classes), class_weights)),
class_weights
Run Code Online (Sandbox Code Playgroud)

在 Jupyter 笔记本中,

在此输入图像描述

在此输入图像描述

python classification scikit-learn keras

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

可用于Python的最快SVM实现

我正在用Python构建一些预测模型,并且一直在使用scikits learn的SVM实现.它真的很棒,易于使用,而且速度相对较快.

不幸的是,我开始受到运行时的限制.我在一个大约4 - 5000的完整数据集上运行一个rbf SVM,具有650个功能.每次运行大约需要一分钟.但是通过5倍交叉验证+网格搜索(使用粗到细搜索),对于我手头的任务来说,它有点不可行.那么一般来说,人们对可以在Python中使用的最快SVM实现方面有什么建议吗?那或者任何加速我建模的方法?

我听说过LIBSVM的GPU实现,看起来它可以工作.我不知道Python中可用的任何其他GPU SVM实现,但它肯定会对其他人开放.此外,使用GPU会显着增加运行时间吗?

我还听说有一些方法可以通过在scikits中使用线性SVM +特征映射来近似rbf SVM.不确定人们对这种方法的看法.同样,使用这种方法的任何人都是运行时间的显着增加吗?

提高程序速度的所有想法都是最受欢迎的.

python gpu machine-learning svm scikit-learn

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

如何使用Scikit Learn调整随机森林中的参数?

class sklearn.ensemble.RandomForestClassifier(n_estimators=10,
                                              criterion='gini', 
                                              max_depth=None,
                                              min_samples_split=2,
                                              min_samples_leaf=1, 
                                              min_weight_fraction_leaf=0.0, 
                                              max_features='auto', 
                                              max_leaf_nodes=None, 
                                              bootstrap=True, 
                                              oob_score=False,
                                              n_jobs=1, 
                                              random_state=None,
                                              verbose=0, 
                                              warm_start=False, 
                                              class_weight=None)
Run Code Online (Sandbox Code Playgroud)

我使用的是随机森林模型,包含9个样本和大约7000个属性.在这些样本中,我的分类器识别出3个类别.

我知道这远非理想条件,但我试图找出哪些属性在特征预测中最重要.哪些参数最适合优化功能重要性?

我尝试了不同的,n_estimators并注意到"重要特征"(即feature_importances_阵列中的非零值)的数量急剧增加.

我已经阅读了文档,但如果有任何人有这方面的经验,我想知道哪些参数最适合调整,并简要说明原因.

python parameters machine-learning random-forest scikit-learn

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

从scikit-learn管道获取模型属性

我通常得到这样的PCA负载:

pca = PCA(n_components=2)
X_t = pca.fit(X).transform(X)
loadings = pca.components_
Run Code Online (Sandbox Code Playgroud)

如果我PCA使用scikit-learnpipline 运行...

from sklearn.pipeline import Pipeline
pipeline = Pipeline(steps=[    
('scaling',StandardScaler()),
('pca',PCA(n_components=2))
])
X_t=pipeline.fit_transform(X)
Run Code Online (Sandbox Code Playgroud)

......有可能获得负荷吗?

只是尝试loadings = pipeline.components_失败:

AttributeError: 'Pipeline' object has no attribute 'components_'
Run Code Online (Sandbox Code Playgroud)

谢谢!

(也有兴趣coef_从学习管道中提取属性.)

python scikit-learn neuraxle

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