小编alk*_*lko的帖子

使用sklearn中的RandomForestClassifier进行不平衡分类

我有一个数据集,其中类是不平衡的.类为'1'或'0',其中类'1':'0'的比例为5:1.你如何计算每个类的预测误差和相应的重新平衡权重在sklearn中随机森林,类似于以下链接:http: //www.stat.berkeley.edu/~breiman/RandomForests/cc_home.htm#平衡

python classification machine-learning random-forest scikit-learn

32
推荐指数
3
解决办法
3万
查看次数

熊猫:同时分配多个*new*列

我有一个DataFrame,其中一列包含每行的标签(除了每行的一些相关数据).我有一个字典,其键等于可能的标签和值,等于与该标签相关的2元组信息.我想在我的框架上添加两个新列,一个对应于每行标签的2元组的每个部分.

这是设置:

import pandas as pd
import numpy as np

np.random.seed(1)
n = 10

labels = list('abcdef')
colors = ['red', 'green', 'blue']
sizes = ['small', 'medium', 'large']

labeldict = {c: (np.random.choice(colors), np.random.choice(sizes)) for c in labels}

df = pd.DataFrame({'label': np.random.choice(labels, n), 
                   'somedata': np.random.randn(n)})
Run Code Online (Sandbox Code Playgroud)

我可以通过运行得到我想要的东西:

df['color'], df['size'] = zip(*df['label'].map(labeldict))
print df

  label  somedata  color    size
0     b  0.196643    red  medium
1     c -1.545214  green   small
2     a -0.088104  green   small
3     c  0.852239  green   small
4     b  0.677234    red  medium
5 …
Run Code Online (Sandbox Code Playgroud)

python pandas

28
推荐指数
3
解决办法
2万
查看次数

使用用户定义的指标Sklearn kNN用法

目前我正在做一个可能需要使用kNN算法来找到给定点的前k个最近邻居的项目,比如P. im使用python,sklearn包来完成这项工作,但是我们的预定义度量不是那些默认值指标.所以我必须使用用户定义的度量标准,来自sklearn的文档,可以在这里这里找到.

似乎最新版本的sklearn kNN支持用户定义的度量标准,但我无法找到如何使用它:

import sklearn
from sklearn.neighbors import NearestNeighbors
import numpy as np
from sklearn.neighbors import DistanceMetric
from sklearn.neighbors.ball_tree import BallTree
BallTree.valid_metrics
Run Code Online (Sandbox Code Playgroud)

我已经定义了一个名为mydist = max(xy)的度量,然后使用DistanceMetric.get_metric使其成为DistanceMetric对象:

dt=DistanceMetric.get_metric('pyfunc',func=mydist)
Run Code Online (Sandbox Code Playgroud)

从文档中,该行应该如下所示

nbrs = NearestNeighbors(n_neighbors=4, algorithm='auto',metric='pyfunc').fit(A)
distances, indices = nbrs.kneighbors(A)
Run Code Online (Sandbox Code Playgroud)

但我dt在哪里可以放入?谢谢

python knn

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

为什么Python和Ruby这么慢,而Lisp实现速度很快?

我发现像函数调用和循环这样的简单事情,甚至只是递增计数器的循环在Python和Ruby中花费的时间远远多于Chicken Scheme,Racket或SBCL.

为什么会这样?我经常听到有人说慢速是你为动态语言付出的代价,但是Lisps非常动态并且速度不是很慢(它们通常比C慢不到5倍; Ruby和Python可以达到两位数).此外,Lisp样式使用递归,并不总是尾递归,很多,堆栈是堆中的连续的链接列表等,这似乎应该使Lisp比命令式样式的Python和Ruby慢.

Racket和SBCL是JITted,但Chicken Scheme要么是静态编译的,要么使用非优化的解释器,这两种解释器都应该非常适合动态语言并且速度慢.即使使用了csiChicken Scheme 的天真解释器(甚至不进行字节码编译!),我的速度远远超出了Python和Ruby.

与类似的动态Lisps相比,为什么Python和Ruby的速度如此之慢?是因为它们是面向对象的,需要巨大的vtable和类型heirarchies?

示例:阶乘函数.蟒蛇:

def factorial(n):
    if n == 0:
        return 1
    else:
    return n*factorial(n-1)

for x in xrange(10000000):
    i = factorial(10)
Run Code Online (Sandbox Code Playgroud)

球拍:

#lang racket

(define (factorial n)
  (cond
   [(zero? n) 1]
   [else (* n (factorial (sub1 n)))]))

(define q 0)

(for ([i 10000000])
  (set! q (factorial 10)))
Run Code Online (Sandbox Code Playgroud)

时间结果:

ithisa@miyasa /scratch> time racket factorial.rkt
racket factorial.rkt  1.00s user 0.03s system 99% cpu 1.032 total
ithisa@miyasa /scratch> time python factorial.py
python …
Run Code Online (Sandbox Code Playgroud)

ruby lisp python performance scheme

23
推荐指数
2
解决办法
1万
查看次数

如何为python 3.3安装django

我有python 2.6.1,因为它很旧我决定安装python 3.3.2但是,当我在我的mac中输入"python"它打印它是版本2.6.1并且当我输入python3时它显示这是3.3.2 .我安装了django 1.6但是当我检查时,了解它是为旧版本的python(python 2.6.1)安装的.我想为我的python 3.3.2安装它我该怎么办?任何卸载python 2.6.1的方法,当我在终端输入python时,它的版本是3.3.2吗?我有mac os 10.6.8

python django macos

12
推荐指数
2
解决办法
1万
查看次数

读取包含Pandas中列表的csv

我正试图把这个csv读成大熊猫

HK,"[u'5328.1', u'5329.3', '2013-12-27 13:58:57.973614']"
HK,"[u'5328.1', u'5329.3', '2013-12-27 13:58:59.237387']"
HK,"[u'5328.1', u'5329.3', '2013-12-27 13:59:00.346325']"
Run Code Online (Sandbox Code Playgroud)

正如您所看到的,只有2列,第二列是列表,当使用带有参数的pd.read_csv()时,有没有办法正确解释它(意味着将列表中的值读取为列)?

谢谢

python csv pandas

11
推荐指数
2
解决办法
8533
查看次数

适合平面算法,如何预测结果?

更新:我已经修改了Optimize,Eigen和Solve方法来反映变化.所有现在都返回"相同"向量,允许机器精度. 我仍然对Eigen方法感到困惑.具体如何/为什么我选择特征向量切片没有意义.这只是试验和错误,直到正常情况与其他解决方案相匹配.如果有人能够纠正/解释我真正应该做的事情,或者为什么我做了什么工作我会很感激..

感谢 亚历山大克莱默解释为什么我采取切片,只能选择一个正确的答案

我有一个深度图像.我想计算深度图像中像素的粗糙表面法线.我考虑周围像素,在最简单的情况下是3x3矩阵,并将平面拟合到这些点,并计算该平面的法向单位矢量.

听起来很简单,但最好先考虑平面拟合算法.搜索SO和其他各种网站,我看到使用最小二乘法,单值分解,特征向量/值等的方法.

虽然我不完全理解数学,但我已经能够使各种片段/示例起作用.我遇到的问题是,我对每种方法都有不同的答案.我期待各种答案是相似的(不完全),但它们似乎有很大的不同.也许有些方法不适合我的数据,但不确定为什么我会得到不同的结果.有什么想法吗?

这是代码的更新输出:

LTSQ:   [ -8.10792259e-17   7.07106781e-01  -7.07106781e-01]
SVD:    [ 0.                0.70710678      -0.70710678]
Eigen:  [ 0.                0.70710678      -0.70710678]
Solve:  [ 0.                0.70710678       0.70710678]
Optim:  [ -1.56069661e-09   7.07106781e-01   7.07106782e-01]
Run Code Online (Sandbox Code Playgroud)

以下代码实现了五种不同的方法来计算平面的曲面法线.算法/代码来自互联网上的各种论坛.

import numpy as np
import scipy.optimize

def fitPLaneLTSQ(XYZ):
    # Fits a plane to a point cloud, 
    # Where Z = aX + bY + c        ----Eqn #1
    # Rearanging Eqn1: aX + bY -Z +c =0
    # Gives normal (a,b,-1)
    # …
Run Code Online (Sandbox Code Playgroud)

python numpy svd least-squares

9
推荐指数
2
解决办法
7576
查看次数

如何使用python在hadoop流媒体作业中使用文件?

我想从我的hadoop流媒体作业中的文件中读取一个列表.这是我简单的mapper.py:

#!/usr/bin/env python

import sys
import json

def read_file():
    id_list = []
    #read ids from a file
    f = open('../user_ids','r')
    for line in f:
        line = line.strip()
        id_list.append(line)
    return id_list

if __name__ == '__main__':
    id_list = set(read_file())
    # input comes from STDIN (standard input)
    for line in sys.stdin:
        # remove leading and trailing whitespace
        line = line.strip()
        line = json.loads(line)
        user_id = line['user']['id']
        if str(user_id) in id_list:
            print '%s\t%s' % (user_id, line)
Run Code Online (Sandbox Code Playgroud)

这是我的reducer.py

#!/usr/bin/env python

from operator import itemgetter
import …
Run Code Online (Sandbox Code Playgroud)

python hadoop hadoop-streaming

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

sklearn.mixture.DPGMM:意外的结果

我从DPGMM得到的结果不是我所期望的.例如:

>>> import sklearn.mixture
>>> sklearn.__version__
'0.12-git'
>>> data = [[1.1],[0.9],[1.0],[1.2],[1.0], [6.0],[6.1],[6.1]]
>>> m = sklearn.mixture.DPGMM(n_components=5, n_iter=1000, alpha=1)
>>> m.fit(data)
DPGMM(alpha=1, covariance_type='diag', init_params='wmc', min_covar=None,
   n_components=5, n_iter=1000, params='wmc',
   random_state=<mtrand.RandomState object at 0x108a3f168>, thresh=0.01,
   verbose=False)
>>> m.converged_
True
>>> m.weights_
array([ 0.2,  0.2,  0.2,  0.2,  0.2])
>>> m.means_
array([[ 0.62019109],
       [ 1.16867356],
       [ 0.55713292],
       [ 0.36860511],
       [ 0.17886128]])
Run Code Online (Sandbox Code Playgroud)

我预计结果会更像香草GMM; 也就是说,两个高斯(大约是1和6),具有不均匀的权重(如[0.625,0.375]).我预计"未使用过的"高斯人的重量接近于零.

我错误地使用了模型吗?

我也尝试过改变阿尔法而没有任何运气.

python cluster-analysis machine-learning scikit-learn

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

pandas基于另一个列表的qcut列出一个列表

说我有一个清单:

a = [3, 5, 1, 1, 3, 2, 4, 1, 6, 4, 8]
Run Code Online (Sandbox Code Playgroud)

和一个子列表:

b = [5, 2, 6, 8]
Run Code Online (Sandbox Code Playgroud)

我想获取bin pd.qcut(a,2)并计算列表b的每个bin中的值的数量.那是

In[84]: pd.qcut(a,2)
Out[84]: 
Categorical: 
[[1, 3], (3, 8], [1, 3], [1, 3], [1, 3], [1, 3], (3, 8], [1, 3], (3, 8], (3, 8], (3, 8]]
Levels (2): Index(['[1, 3]', '(3, 8]'], dtype=object)
Run Code Online (Sandbox Code Playgroud)

现在我知道箱子是:[1,3]和(3,8),我想知道列表"b"的每个箱子中有多少值.当箱子的数量为时,我可以手动完成很小,但是当垃圾箱数量很大时,最好的方法是什么?

python binning pandas

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