我试图在scikit-learn中为RidgeClassifierCV实现一个自定义的评分函数。 这涉及在初始化RidgeClassifierCV对象时将自定义评分函数作为score_func RidgeClassifierCV 。 我期望score_func将y_true和y_pred分类值作为input。 但是,浮点值作为y_true和y_pred 。 y向量的大小等于类数乘以训练样例数,而不是简单地具有长度等于训练样例数的y向量。 我能以某种方式强制分类预测传递到自定义评分函数,还是我必须处理原始权重? 如果我不得不直接处理原始权重,那么输出向量的一个片段中的最大值的索引是否等同于预测的类别?
我想在scikit学习中实现一个机器学习algorithm,但我不明白这个参数random_state做什么? 我为什么要用它? 我也不明白什么是伪随机数字。
我很难理解scikit-learn的Logistic回归中的class_weight参数是如何运作的。 情况 我想用逻辑回归来对非常不平衡的数据集进行二元分类。 这些类别被标记为0(负)和1(正),并且观察到的数据与大多数样品具有负面结果的比率约为19:1。 第一次尝试:手动准备培训数据 我将这些数据分成了不相交的集合,用于训练和testing(约80/20)。 然后我手工对训练数据进行随机抽样,得到不同比例的训练数据,比例为19:1; 从2:1 – > 16:1。 然后,我对这些不同的训练数据子集进行逻辑回归训练,并作为不同训练比例的函数绘制回忆(= TP /(TP + FN))。 当然,召回是在不相交的TEST样品上计算出来的,其比例为19:1。 请注意,尽pipe我在不同的训练数据上训练了不同的模型,但我还是在相同的(不相交的)testing数据上计算了所有的模型。 结果如预期:在2:1的训练比例下,回收率约为60%,到达16:1时相当快地下降。 召回率在5%以上的比例为2:1 – > 6:1。 第二次尝试:网格search 接下来,我想testing不同的正则化参数,所以我使用了GridSearchCV,并创build了一个包含C参数的几个值以及class_weight参数的网格。 把我的n:m比例的负面:正面训练样本翻译成class_weight的字典语言我以为我只是指定了几个字典,如下所示: { 0:0.67, 1:0.33 } #expected 2:1 { 0:0.75, 1:0.25 } #expected 3:1 { 0:0.8, 1:0.2 } #expected 4:1 我也包括None和auto 。 这一次结果完全被摧毁了。 除了auto之外,我所有的召回都是很小的(<0.05)。 所以我只能假设我对如何设置class_weight字典的理解是错误的。 有趣的是,在网格search中,“auto”的class_weight值对于C所有值都大约为59%,我猜想它平衡到1:1。 我的问题 1)您如何正确使用class_weight来实现您实际给予的训练数据的不同平衡? 具体来说,我传递给class_weight字典使用n:m比例的否定:正面训练样本? 2)如果您将各种class_weight字典传递给GridSearchCV,那么在交叉validation期间,它将根据字典重新平衡训练折叠数据,但是使用真实的给定样本比例来计算testing折叠上的评分函数? 这是至关重要的,因为任何度量标准对于我来说都是有用的,如果它来自于观察比例的数据。 […]
我做了一些奇怪的观察,发现我的GridSearches在几个小时后仍然失败,我最初不知道为什么。 我随着时间的推移对内存使用情况进行了监控,并看到它以几千兆字节(〜6 Gb)开始并持续增长,直到达到最大值时才崩溃。 128 GB的硬件可以采取。 我正在试验随机森林分类大量的文本文件。 为了简单起见 – 弄清楚发生了什么 – 我回到了朴素的贝叶斯。 我正在使用的版本是 Python 3.4.2 scikit-learn 0.15.2 我在GitHub的scikit-issue列表上发现了一些关于这个主题的讨论: https : //github.com/scikit-learn/scikit-learn/issues/565和https://github.com/scikit-learn/scikit -learn /拉/ 770 这听起来像是已经成功解决了! 所以,我正在使用的相关代码是 grid_search = GridSearchCV(pipeline, parameters, n_jobs=1, # cv=5, scoring='roc_auc', verbose=2, pre_dispatch='2*n_jobs', refit=False) # tried both True and False grid_search.fit(X_train, y_train) print('Best score: {0}'.format(grid_search.best_score_)) print('Best parameters set:') 出于好奇,我后来决定通过嵌套for循环来实现网格search的快速和肮脏的方式 for p1 in parameterset1: […]
我在Windows 8中安装了GraphViz 2.32,并将C:\ Program Files(x86)\ Graphviz2.32 \ bin添加到System PATHvariables中。 仍然pydot无法find它的可执行文件。 Traceback (most recent call last): File "<pyshell#26>", line 1, in <module> graph.write_png('example1_graph.png') File "build\bdist.win32\egg\pydot.py", line 1809, in <lambda> lambda path, f=frmt, prog=self.prog : self.write(path, format=f, prog=prog)) File "build\bdist.win32\egg\pydot.py", line 1911, in write dot_fd.write(self.create(prog, format)) File "build\bdist.win32\egg\pydot.py", line 1953, in create 'GraphViz\'s executables not found' ) […]
我有一个时间序列作为数据input的分类任务,其中每个属性(n = 23)代表一个特定的时间点。 除了绝对的分类结果之外,我还想知道哪些属性/date对结果有什么影响。 因此,我只是使用feature_importances_ ,这对我很好。 但是,我想知道他们如何计算和使用哪种度量/algorithm。 不幸的是我找不到关于这个主题的任何文档。
我可以从决策树中的训练树中提取底层决策规则(或“决策path”) – 作为文本列表吗? 例如: "if A>0.4 then if B<0.2 then if C>0.8 then class='X'等等。 如果有人知道一个简单的方法,这将是非常有帮助的。
我有一个pandas数据框,我希望能够从列B和C中的值预测列A的值。这里是一个玩具的例子: import pandas as pd df = pd.DataFrame({"A": [10,20,30,40,50], "B": [20, 30, 10, 40, 50], "C": [32, 234, 23, 23, 42523]}) 理想情况下,我会有类似ols(A ~ B + C, data = df)但是当我查看像scikit-learn这样的algorithm库中的例子时 ,它似乎用行列表而不是列来向数据提供数据。 这将要求我将数据重新格式化为列表内的列表,这似乎首先打败了使用pandas的目的。 什么是对大pandas数据框架中的数据运行OLS回归(或更普遍的任何机器学习algorithm)最pythonic的方式?
我想有一个NumPy数组的规范。 更具体地说,我正在寻找这个function的等效版本 def normalize(v): norm = np.linalg.norm(v) if norm == 0: return v return v / norm 有没有像skearn或numpy那样的东西? 这个函数在v是0向量的情况下工作。
是否可以使用scikit-learn K-Means Clustering来指定自己的距离函数?