我正在尝试在scikit-learn中为RidgeClassifierCV实现自定义评分功能.这涉及将自定义评分函数作为score_func初始化RidgeClassifierCV对象时传递.我希望score_func将分类值作为y_true和的输入y_pred.但是,相反,浮点值将作为y_true和传入y_pred.y向量的大小等于类的数量乘以训练样本的数量,而不是简单地具有长度等于训练样本的数量的y向量.
我可以以某种方式强制将分类预测传递到自定义评分函数,还是我必须处理原始权重?如果我必须直接处理原始权重,那么输出向量切片中最大值的索引是否等于预测类?
我正在使用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) Scikit-learn采用了一种非常方便的方法fit和predict方法.我有适合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中实现这个简单的模型吗?
我正在尝试使用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)?或者我做错了什么?
我无法理解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(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曲线下的面积.可能是因为数据集不平衡但我无法弄清楚原因.
谢谢!
在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?
我编写的分类器脚本运行良好,最近在配件中添加了重量平衡。由于我使用“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构建一些预测模型,并且一直在使用scikits learn的SVM实现.它真的很棒,易于使用,而且速度相对较快.
不幸的是,我开始受到运行时的限制.我在一个大约4 - 5000的完整数据集上运行一个rbf SVM,具有650个功能.每次运行大约需要一分钟.但是通过5倍交叉验证+网格搜索(使用粗到细搜索),对于我手头的任务来说,它有点不可行.那么一般来说,人们对可以在Python中使用的最快SVM实现方面有什么建议吗?那或者任何加速我建模的方法?
我听说过LIBSVM的GPU实现,看起来它可以工作.我不知道Python中可用的任何其他GPU SVM实现,但它肯定会对其他人开放.此外,使用GPU会显着增加运行时间吗?
我还听说有一些方法可以通过在scikits中使用线性SVM +特征映射来近似rbf SVM.不确定人们对这种方法的看法.同样,使用这种方法的任何人都是运行时间的显着增加吗?
提高程序速度的所有想法都是最受欢迎的.
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
我通常得到这样的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 ×10
scikit-learn ×10
gpu ×1
k-means ×1
keras ×1
neuraxle ×1
pandas ×1
parameters ×1
svm ×1
tensorflow ×1
tf-idf ×1
time-series ×1