标签: scikit-learn

如何确定RandomForestClassifier中的feature_importances?

我有一个分类任务,时间序列作为数据输入,其中每个属性(n = 23)代表一个特定的时间点.除了绝对分类结果我想知道,哪些属性/日期对结果的贡献程度如何.所以我只是使用它feature_importances_,这对我很有用.

但是,我想知道如何计算它们以及使用哪种度量/算法.很遗憾,我找不到有关此主题的任何文档.

feature-selection random-forest scikit-learn

114
推荐指数
4
解决办法
6万
查看次数

如何将数据分成3组(训练,验证和测试)?

我有一个熊猫数据帧,我希望把它分成3组.我知道使用train_test_splitsklearn.cross_validation,一个可以在两个集(训练集和测试)分割数据.但是,我找不到任何关于将数据拆分为三组的解决方案.最好,我想拥有原始数据的索引.

我知道解决方法是使用train_test_split两次并以某种方式调整索引.但有没有更标准/内置的方法将数据分成3组而不是2组?

numpy machine-learning dataframe pandas scikit-learn

112
推荐指数
4
解决办法
6万
查看次数

从sklearn导入时导入:无法导入名称check_build

尝试从sklearn导入时出现以下错误:

>>> from sklearn import svm

Traceback (most recent call last):
  File "<pyshell#17>", line 1, in <module>
   from sklearn import svm
  File "C:\Python27\lib\site-packages\sklearn\__init__.py", line 16, in <module>
   from . import check_build
ImportError: cannot import name check_build
Run Code Online (Sandbox Code Playgroud)

我使用的是python 2.7,scipy-0.12.0b1 superpack,numpy-1.6.0 superpack,scikit-learn-0.11我有一个windows 7机器

我已经检查了这个问题的几个答案,但没有一个能解决这个问题.

python numpy scipy scikit-learn

108
推荐指数
6
解决办法
17万
查看次数

ImportError:没有名为sklearn.cross_validation的模块

我在Ubuntu 14.04中使用python 2.7.我用这些命令安装了scikit-learn,numpy和matplotlib:

sudo apt-get install build-essential python-dev python-numpy \
python-numpy-dev python-scipy libatlas-dev g++ python-matplotlib \
ipython
Run Code Online (Sandbox Code Playgroud)

但是当我导入这些包时:

from sklearn.cross_validation import train_test_split
Run Code Online (Sandbox Code Playgroud)

它返回给我这个错误:

ImportError: No module named sklearn.cross_validation
Run Code Online (Sandbox Code Playgroud)

我需要做什么?

python scikit-learn

108
推荐指数
13
解决办法
17万
查看次数

使用Pandas Data Frame运行OLS回归

我有一个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]})
Run Code Online (Sandbox Code Playgroud)

理想情况下,我会有类似的东西ols(A ~ B + C, data = df),但当我从算法库中查看示例时,scikit-learn它似乎将数据提供给模型,其中包含行而不是列.这将要求我将数据重新格式化为列表中的列表,这似乎首先打败了使用pandas的目的.在pandas数据框中对数据运行OLS回归(或更普遍的机器学习算法)的最pythonic方法是什么?

python regression pandas scikit-learn statsmodels

107
推荐指数
5
解决办法
17万
查看次数

scikit-learn中的class_weight参数如何工作?

我很难理解class_weightscikit-learn的Logistic回归中的参数是如何运作的.

情况

我想使用逻辑回归对非常不平衡的数据集进行二进制分类.类别标记为0(负)和1(正),观察数据的比例约为19:1,大多数样本具有负结果.

第一次尝试:手动准备训练数据

我将我拥有的数据拆分为不相交的集合进行培训和测试(约80/20).然后我手动随机抽取训练数据,得到不同比例的训练数据,比例为19:1; 从2:1 - > 16:1.

然后,我在这些不同的训练数据子集上训练逻辑回归,并绘制召回(= TP /(TP + FN))作为不同训练比例的函数.当然,召回是根据观察到的比例为19:1的不相交TEST样本计算的.请注意,虽然我在不同的训练数据上训练了不同的模型,但我在相同(不相交)的测试数据上计算了所有这些模型的回忆.

结果如预期的那样:召回率为2:1的训练比例约为60%,并且在达到16:1时下降得相当快.有几个比例为2:1 - > 6:1,召回率高于5%.

第二次尝试:网格搜索

接下来,我想测试不同的正则化参数,所以我使用了GridSearchCV并制作了一个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
Run Code Online (Sandbox Code Playgroud)

我也包括Noneauto.

这次结果完全被摧毁了.对于class_weight除了的每个值,我的所有召回都很小(<0.05)auto.所以我只能假设我对如何设置class_weight字典的理解是错误的.有趣的是,class_weight网格搜索中'auto' 的值对于所有值都是59%左右C,我猜它平衡为1:1?

我的问题

1)如何正确使用class_weight来实现训练数据的不同平衡,从实际给出的数据?具体来说,我传给什么词典class_weight使用n:m比例的负面:正面训练样本?

2)如果您将各种class_weight词典传递给GridSearchCV,在交叉验证期间它会根据字典重新平衡训练折叠数据,但是使用真实的给定样本比例来计算测试折叠上的评分函数?这是至关重要的,因为任何度量标准仅对我有用,如果它来自观察到的比例的数据.

3)就比例而言auto,class_weight做什么的价值是多少?我阅读了文档,我假设"平衡数据与它们的频率成反比"只是意味着它以1:1的比例.它是否正确?如果没有,有人可以澄清吗?

非常感谢,任何澄清将不胜感激!

python scikit-learn

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

sklearn error ValueError:输入包含NaN,无穷大或对于dtype('float64')来说太大的值

我正在使用sklearn并且亲和力传播有问题.我已经构建了一个输入矩阵,我不断收到以下错误.

ValueError: Input contains NaN, infinity or a value too large for dtype('float64').
Run Code Online (Sandbox Code Playgroud)

我跑了

np.isnan(mat.any()) #and gets False
np.isfinite(mat.all()) #and gets True
Run Code Online (Sandbox Code Playgroud)

我试过用

mat[np.isfinite(mat) == True] = 0
Run Code Online (Sandbox Code Playgroud)

删除无限值但这也不起作用.我该怎么做才能摆脱矩阵中的无限值,以便我可以使用亲和传播算法?

我正在使用anaconda和python 2.7.9.

python python-2.7 scikit-learn valueerror

99
推荐指数
10
解决办法
20万
查看次数

如何用scikit学习多类案例的精确度,召回率,准确度和f1分数?

我正在处理情绪分析问题,数据看起来像这样:

label instances
    5    1190
    4     838
    3     239
    1     204
    2     127
Run Code Online (Sandbox Code Playgroud)

所以我的数据是不平衡的,因为1190 instances标有5.对于分类我使用scikit的SVC.问题是我不知道如何以正确的方式平衡我的数据,以便准确计算多类案例的精确度,召回率,准确度和f1分数.所以我尝试了以下方法:

第一:

    wclf = SVC(kernel='linear', C= 1, class_weight={1: 10})
    wclf.fit(X, y)
    weighted_prediction = wclf.predict(X_test)

print 'Accuracy:', accuracy_score(y_test, weighted_prediction)
print 'F1 score:', f1_score(y_test, weighted_prediction,average='weighted')
print 'Recall:', recall_score(y_test, weighted_prediction,
                              average='weighted')
print 'Precision:', precision_score(y_test, weighted_prediction,
                                    average='weighted')
print '\n clasification report:\n', classification_report(y_test, weighted_prediction)
print '\n confussion matrix:\n',confusion_matrix(y_test, weighted_prediction)
Run Code Online (Sandbox Code Playgroud)

第二:

auto_wclf = SVC(kernel='linear', C= 1, class_weight='auto')
auto_wclf.fit(X, y)
auto_weighted_prediction = auto_wclf.predict(X_test)

print 'Accuracy:', accuracy_score(y_test, auto_weighted_prediction)

print …
Run Code Online (Sandbox Code Playgroud)

python nlp artificial-intelligence machine-learning scikit-learn

99
推荐指数
4
解决办法
13万
查看次数

用sklearn扩展的pandas数据帧列

我有一个带有混合类型列的pandas数据帧,我想将sklearn的min_max_scaler应用于某些列.理想情况下,我想在适当的位置进行这些转换,但还没有想出办法.我编写了以下代码:

import pandas as pd
import numpy as np
from sklearn import preprocessing

scaler = preprocessing.MinMaxScaler()

dfTest = pd.DataFrame({'A':[14.00,90.20,90.95,96.27,91.21],'B':[103.02,107.26,110.35,114.23,114.68], 'C':['big','small','big','small','small']})
min_max_scaler = preprocessing.MinMaxScaler()

def scaleColumns(df, cols_to_scale):
    for col in cols_to_scale:
        df[col] = pd.DataFrame(min_max_scaler.fit_transform(pd.DataFrame(dfTest[col])),columns=[col])
    return df

dfTest

    A   B   C
0    14.00   103.02  big
1    90.20   107.26  small
2    90.95   110.35  big
3    96.27   114.23  small
4    91.21   114.68  small

scaled_df = scaleColumns(dfTest,['A','B'])
scaled_df

A   B   C
0    0.000000    0.000000    big
1    0.926219    0.363636    small
2    0.935335    0.628645    big
3    1.000000 …
Run Code Online (Sandbox Code Playgroud)

python dataframe pandas scikit-learn

98
推荐指数
7
解决办法
11万
查看次数

sklearn:调用LinearRegression.fit()时发现样本数不一致的数组

只是尝试做一个简单的线性回归,但我对这个错误感到困惑:

regr = LinearRegression()
regr.fit(df2.iloc[1:1000, 5].values, df2.iloc[1:1000, 2].values)
Run Code Online (Sandbox Code Playgroud)

产生:

ValueError: Found arrays with inconsistent numbers of samples: [  1 999]
Run Code Online (Sandbox Code Playgroud)

这些选择必须具有相同的尺寸,它们应该是numpy数组,所以我缺少什么?

scikit-learn

97
推荐指数
4
解决办法
15万
查看次数