小编cja*_*vin的帖子

sklearn.LabelEncoder以前从未见过的值

如果a sklearn.LabelEncoder已安装在训练集上,如果在测试集上使用时遇到新值,则可能会中断.

我能想到的唯一解决方案是将测试集中的所有新内容(即不属于任何现有类)映射到"<unknown>",然后在后面显式添加相应的类LabelEncoder:

# train and test are pandas.DataFrame's and c is whatever column
le = LabelEncoder()
le.fit(train[c])
test[c] = test[c].map(lambda s: '<unknown>' if s not in le.classes_ else s)
le.classes_ = np.append(le.classes_, '<unknown>')
train[c] = le.transform(train[c])
test[c] = le.transform(test[c])
Run Code Online (Sandbox Code Playgroud)

这有效,但有更好的解决方案吗?

更新

正如@sapo_cosmico在评论中指出的那样,似乎上面的内容不再适用,因为我认为是实现更改LabelEncoder.transform,现在似乎正在使用np.searchsorted(我不知道以前是否是这种情况).因此,不需要将<unknown>类附加到LabelEncoder已经提取的类的列表中,而是需要按排序顺序插入:

import bisect
le_classes = le.classes_.tolist()
bisect.insort_left(le_classes, '<unknown>')
le.classes_ = le_classes
Run Code Online (Sandbox Code Playgroud)

然而,总而言之,这感觉非常笨重,我确信有更好的方法.

python scikit-learn

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

如何计算python-Levenshtein.ratio

根据python-Levenshtein.ratio消息来源:

https://github.com/miohtama/python-Levenshtein/blob/master/Levenshtein.c#L722

它被计算为(lensum - ldist) / lensum.这适用于

distance('ab', 'a') = 1
ratio('ab', 'a') = 0.666666
Run Code Online (Sandbox Code Playgroud)

但是,它似乎打破了

distance('ab', 'ac') = 1
ratio('ab', 'ac') = 0.5
Run Code Online (Sandbox Code Playgroud)

我觉得我必须遗漏一些非常简单的事情......但为什么不0.75呢?

python levenshtein-distance

25
推荐指数
4
解决办法
1万
查看次数

异步任务与协程

阅读asyncio 文档,我意识到我不理解一个非常基本和基本的方面:直接等待协程与等待包含在任务中的同一个协程之间的区别。

在文档示例中,对say_after协程的两次调用在没有等待时顺序运行create_task,而在包装中时并发运行create_task。所以我明白这基本上就是区别,这是一个非常重要的区别。

然而让我困惑的是,在我到处阅读的示例代码中(例如展示如何使用aiohttp),有很多地方等待(用户定义的)协程(通常在其他一些用户定义的协程中间)而没有被包裹在一个任务中,我想知道为什么会这样。确定何时应将协程包装在任务中的标准是什么?

python-asyncio

14
推荐指数
1
解决办法
2254
查看次数

使用带有Python请求的cookies.txt文件

我正在尝试使用cookies.txtPython请求使用文件(使用Chrome扩展程序生成)访问经过身份验证的网站:

import requests, cookielib

cj = cookielib.MozillaCookieJar('cookies.txt')
cj.load()
r = requests.get(url, cookies=cj)
Run Code Online (Sandbox Code Playgroud)

它不会抛出任何错误或异常,但会错误地生成登录屏幕.但是,我知道我的cookie文件是有效的,因为我可以使用它成功检索我的内容wget.知道我做错了什么吗?

编辑:

我跟踪cookielib.MozillaCookieJar._really_load,并且可以验证cookie被正确解析(即他们有正确的价值观为domain,path,secure等标记).但由于事务仍然导致登录表单,似乎wget必须做一些额外的事情(因为完全相同的cookies.txt文件适用于它).

python cookies cookielib python-requests

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

使用(仅)SQLAlchemy Core的Flask应用程序模式

我有我想要使用SQLAlchemy核心的烧瓶中的应用程序(即我明确希望使用ORM),在烧瓶文档描述这个"第四条道路"类似:

http://flask.pocoo.org/docs/patterns/sqlalchemy/#sql-abstraction-layer

我想知道在以下方面推荐的模式是什么:

  1. 如何连接到我的数据库(我可以简单地将一个connection实例存储在g.db变量中before_request吗?)

  2. 如何执行反射以检索现有数据库的结构(如果可能,我希望避免显式创建任何"模型/表类")

python sqlalchemy flask

9
推荐指数
1
解决办法
1961
查看次数

使用PyPI + OS级依赖项打包Python应用程序

我想为PyPI打包一个Python科学应用程序.我的问题是,它依靠的PyPI级DEPS(如numpy的,SciPy的等)以及其他必须在操作系统级别的处理:wxPython的和Python-VTK(如在Ubuntu apt-get的,自制的OSX等).

我想知道这样做的理想策略是什么,特别是哪种包装系统最适合(我目前偏爱Distribute).

python packaging pip pypi

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

Clojure线程环境中的全局变量行为

鉴于这是我所期望的:

(do
  (println (resolve 'a)) ; nil 
  (def a "a")
  (println (resolve 'a))) ; #'user/a
Run Code Online (Sandbox Code Playgroud)

我想明白为什么不这样做:

(future
  (println (resolve 'b)) ; #'user/b (shouldn't it be still undefined at this point?)
  (def b "b")
  (println (resolve 'b))) ; #'user/b
Run Code Online (Sandbox Code Playgroud)

我也想知道这是否是一个合适的解决方案(不是完全解决同样的问题,而是在我的上下文中做同等的工作):

(def c (atom nil))
(future
  (println @c) ; nil
  (reset! c "c")
  (println @c)) ; c
Run Code Online (Sandbox Code Playgroud)

global-variables clojure

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

Python dict不理解

(抱歉,无法抗拒双关语!)

我想知道为什么翻译似乎不可能:

dict([(str(x),x) if x % 2 else (str(x),x*10) for x in range(10)])
Run Code Online (Sandbox Code Playgroud)

使用dict理解进入这个更易读的表达式:

{str(x):x if x % 2 else str(x):x*10 for x in range(10)}
Run Code Online (Sandbox Code Playgroud)

python dictionary

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

使用PostgreSQL的钱类型而不是数字

我正在考虑将numeric我的PG 9.2数据库模式的列转换为money,主要是因为我看到(或想象?)在数据库级别而不是应用程序级别处理舍入和格式化的好处.这个决定会有一些缺点吗?

postgresql currency database-schema money-format

3
推荐指数
1
解决办法
3389
查看次数

选择性展平Python列表

假设我有一个包含(以及其他)不同类型的子列表的列表:

[1, 2, [3, 4], {5, 6}]
Run Code Online (Sandbox Code Playgroud)

我想以一种选择性的方式扁平化,这取决于它的元素类型(即我只想展平sets,其余部分不平整):

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

我目前的解决方案是一个功能,但仅仅是出于我的求知欲,我想知道是否可以用一个列表理解来做到这一点?

python list-comprehension list flatten

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