小编ADJ*_*ADJ的帖子

scikit .predict()默认阈值

我正在研究不平衡类(5%1)的分类问题.我想预测班级,而不是概率.

在二进制分类问题中,scikit 默认classifier.predict()使用0.5?如果没有,那么默认方法是什么?如果是,我该如何更改?

在scikit中,一些分类器可以class_weight='auto'选择,但并非所有分类器都可以.有class_weight='auto',会.predict()用实际人口比例作为门槛吗?

在像MultinomialNB这样的分类器中不支持的方法是class_weight什么?除了使用predict_proba()然后自己计算类.

python classification machine-learning scikit-learn

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

Python多处理似乎不使用多个核心

我想使用Python多处理来为预测模型运行网格搜索.当我查看核心用法时,它似乎总是只使用一个核心.知道我做错了什么吗?

import multiprocessing
from sklearn import svm
import itertools

#first read some data
#X will be my feature Numpy 2D array
#y will be my 1D Numpy array of labels

#define the grid        
C = [0.1, 1]
gamma = [0.0]
params = [C, gamma]
grid = list(itertools.product(*params))
GRID_hx = []

def worker(par, grid_list):
    #define a sklearn model
    clf = svm.SVC(C=g[0], gamma=g[1],probability=True,random_state=SEED)
    #run a cross validation function: returns error
    ll = my_cross_validation_function(X, y, model=clf, n=1, test_size=0.2)
    print(par, ll)
    grid_list.append((par, ll))


if …
Run Code Online (Sandbox Code Playgroud)

python multiprocessing

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

计算Pandas数据框中的不同单词

我有一个Pandas数据框,其中一列包含文本.我想得到整个列中出现的唯一单词列表(空格是唯一的分割).

import pandas as pd

r1=['My nickname is ft.jgt','Someone is going to my place']

df=pd.DataFrame(r1,columns=['text'])
Run Code Online (Sandbox Code Playgroud)

输出应如下所示:

['my','nickname','is','ft.jgt','someone','going','to','place']
Run Code Online (Sandbox Code Playgroud)

获得计数也没有什么坏处,但并不是必需的.

python text pandas

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

通过id变量计算滚动总和,缺少时间点

我正在努力学习R并且我已经在SAS工作了10多年,但我无法找到最好的R方法.拿这些数据:

 id  class           t  count  desired
 --  -----  ----------  -----  -------
  1      A  2010-01-15      1        1
  1      A  2010-02-15      2        3
  1      B  2010-04-15      3        3
  1      B  2010-09-15      4        4
  2      A  2010-01-15      5        5
  2      B  2010-06-15      6        6
  2      B  2010-08-15      7       13
  2      B  2010-09-15      8       21
Run Code Online (Sandbox Code Playgroud)

我想通过id,class和4个月的滚动窗口计算所需的列作为滚动总和.请注意,对于id和class的每个组合,并非所有月份都存在.

在SAS中,我通常采用以下两种方式之一:

  1. RETAIN 加上一个id和class.
  2. PROC SQL 左边连接从df作为df1到df作为df2在id,class和df1.d-df2.d在相应的窗口中

解决此类问题的最佳方法是什么?

t <- as.Date(c("2010-01-15","2010-02-15","2010-04-15","2010-09-15",
               "2010-01-15","2010-06-15","2010-08-15","2010-09-15"))
class <- c("A","A","B","B","A","B","B","B")
id <- c(1,1,1,1,2,2,2,2)
count <- seq(1,8,length.out=8)
desired <- c(1,3,3,4,5,6,13,21)
df <- data.frame(id,class,t,count,desired)
Run Code Online (Sandbox Code Playgroud)

r sas plyr zoo

14
推荐指数
2
解决办法
3188
查看次数

使用scikit-learn TfIdf和gensim LDA

我在scikit中使用了各种版本的TFIDF来学习一些文本数据的建模.

vectorizer = TfidfVectorizer(min_df=1,stop_words='english')
Run Code Online (Sandbox Code Playgroud)

生成的数据X采用以下格式:

<rowsxcolumns sparse matrix of type '<type 'numpy.float64'>'
    with xyz stored elements in Compressed Sparse Row format>
Run Code Online (Sandbox Code Playgroud)

我想尝试使用LDA作为减少稀疏矩阵维数的方法.有没有一种简单的方法可以将NumPy稀疏矩阵X输入到gensim LDA模型中?

lda = models.ldamodel.LdaModel(corpus=corpus, id2word=dictionary, num_topics=100)
Run Code Online (Sandbox Code Playgroud)

我可以忽略scikit并按照gensim教程概述的方式,但我喜欢scikit矢量化器及其所有参数的简单性.

python text-mining lda scikit-learn

8
推荐指数
1
解决办法
3294
查看次数

使用scikit Random Forest sample_weights

我一直试图找出scikit的随机森林sample_weight使用,我无法解释我看到的一些结果.从根本上说,我需要它来平衡分类问题和不平衡类.特别是,我期待如果我使用所有1的sample_weights数组,我会得到与w sample_weights = None相同的结果.另外,我正在考虑任何等权重阵列(即所有1,或全10或全0.8 ......)将提供相同的结果.也许在这种情况下,我的权重直觉是错误的.这是代码:

import numpy as np
from sklearn import ensemble,metrics, cross_validation, datasets

#create a synthetic dataset with unbalanced classes
X,y = datasets.make_classification(
n_samples=10000, 
n_features=20, 
n_informative=4, 
n_redundant=2, 
n_repeated=0, 
n_classes=2, 
n_clusters_per_class=2, 
weights=[0.9],
flip_y=0.01,
class_sep=1.0, 
hypercube=True, 
shift=0.0, 
scale=1.0, 
shuffle=True, 
random_state=0)

model = ensemble.RandomForestClassifier()

w0=1 #weight associated to 0's
w1=1 #weight associated to 1's

#I should split train and validation but for the sake of understanding sample_weights I'll skip this step
model.fit(X, y,sample_weight=np.array([w0 if r==0 else w1 for r in y])) …
Run Code Online (Sandbox Code Playgroud)

python random-forest scikit-learn

8
推荐指数
1
解决办法
6258
查看次数

R插入模型评估与备用性能指标

我正在使用R的插入包进行网格搜索和模型评估.我有一个自定义评估指标,它是绝对误差的加权平均值.权重在观察级别分配.

X <- c(1,1,2,0,1) #feature 1
w <- c(1,2,2,1,1) #weights
Y <- 1:5 #target, continuous

#assume I run a model using X as features and Y as target and get a vector of predictions

mymetric <- function(predictions, target, weights){

v <- sum(abs(target-predictions)*weights)/sum(weights) 
return(v)
}
Run Code Online (Sandbox Code Playgroud)

这里给出了一个示例,说明如何使用summaryFunction为插入符号train()定义自定义评估指标.报价:

trainControl函数有一个名为summaryFunction的参数,它指定用于计算性能的函数.该函数应具有以下参数:

data是数据框或矩阵的参考,其中包含名为obs和pred的列,用于观察和预测的结果值(回归的数字数据或分类的字符值).目前,类概率不会传递给函数.数据中的值是单个调整参数组合的保持预测(及其相关参考值).如果trainControl对象的classProbs参数设置为TRUE,则将出现包含类概率的数据中的其他列.这些列的名称与类级别相同.lev是一个字符串,其结果因子级别取自训练数据.对于回归,将NULL值传递给函数.model是正在使用的模型的字符串(即传递给train的method参数的值).

我无法弄清楚如何将观察权重传递给summaryFunction.

r evaluation-function r-caret

7
推荐指数
1
解决办法
2329
查看次数

将 json 字符串作为参数传递给 Python 脚本会导致引号问题

我想编写一个脚本,它接受一个参数,一个包含一些 json 数据的字符串,并且(为了简单起见)打印一些东西。

import argparse
import json

parser = argparse.ArgumentParser(description='json load and print')
parser.add_argument('-i','--inputstring', help='Input String in JSON format',required=True)
args = parser.parse_args()

inp = parser.parse_args()

data = json.loads(inp)

print(data['Employees'])
Run Code Online (Sandbox Code Playgroud)

当我从命令行运行它时,我收到一个错误,因为我用来包装字符串的双引号以匹配 json 中的双引号结尾:

python myscript.py -i "{ "Employees": "name name"}"
Unrecognized arguments Employees...
Run Code Online (Sandbox Code Playgroud)

如果我将 json 双引号切换为单引号,则 json 解析器将不起作用。

我如何处理这样的事情?

python json python-2.7

7
推荐指数
1
解决办法
8947
查看次数

sklearn OMP:拟合模型时出现错误#15

我最近卸载了一个很好的Enthought Canopy 32位工作副本并安装了Canopy版本1.1.0(64位).当我尝试使用sklearn来适应模型我的内核崩溃时,我收到以下错误:

The kernel (user Python environment) has terminated with error code 3. This may be due to a bug in your code or in the kernel itself.

Output captured from the kernel process is shown below.

OMP: Error #15: Initializing libiomp5md.dll, but found mk2iomp5md.dll already initialized.
OMP: Hint: This means that multiple copies of the OpenMP runtime have been linked into the program. That is dangerous, since it can degrade performance or cause incorrect results. The …
Run Code Online (Sandbox Code Playgroud)

python enthought scikit-learn canopy

6
推荐指数
6
解决办法
2920
查看次数

如何保存以提交Python IDE的屏幕输出?

我使用Spyder作为我的Python IDE.在我所做的大部分工作中,我使用编辑器编写代码并一次执行一部分程序.我通常来回走动,改变事物,添加碎片,执行部分......你得到它.有没有办法在执行每段代码后保存Spyder在IDE控制台部分显示的文件?

ide logging python-2.7 spyder anaconda

5
推荐指数
1
解决办法
7013
查看次数