我正在研究不平衡类(5%1)的分类问题.我想预测班级,而不是概率.
在二进制分类问题中,scikit 默认classifier.predict()使用0.5?如果没有,那么默认方法是什么?如果是,我该如何更改?
在scikit中,一些分类器可以class_weight='auto'选择,但并非所有分类器都可以.有class_weight='auto',会.predict()用实际人口比例作为门槛吗?
在像MultinomialNB这样的分类器中不支持的方法是class_weight什么?除了使用predict_proba()然后自己计算类.
我想使用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) 我有一个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)
获得计数也没有什么坏处,但并不是必需的.
我正在努力学习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中,我通常采用以下两种方式之一:
RETAIN 加上一个id和class. 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) 我在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矢量化器及其所有参数的简单性.
我一直试图找出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) 我正在使用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.
我想编写一个脚本,它接受一个参数,一个包含一些 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 解析器将不起作用。
我如何处理这样的事情?
我最近卸载了一个很好的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) 我使用Spyder作为我的Python IDE.在我所做的大部分工作中,我使用编辑器编写代码并一次执行一部分程序.我通常来回走动,改变事物,添加碎片,执行部分......你得到它.有没有办法在执行每段代码后保存Spyder在IDE控制台部分显示的文件?