如果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-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呢?
阅读asyncio 文档,我意识到我不理解一个非常基本和基本的方面:直接等待协程与等待包含在任务中的同一个协程之间的区别。
在文档示例中,对say_after协程的两次调用在没有等待时顺序运行create_task,而在包装中时并发运行create_task。所以我明白这基本上就是区别,这是一个非常重要的区别。
然而让我困惑的是,在我到处阅读的示例代码中(例如展示如何使用aiohttp),有很多地方等待(用户定义的)协程(通常在其他一些用户定义的协程中间)而没有被包裹在一个任务中,我想知道为什么会这样。确定何时应将协程包装在任务中的标准是什么?
我正在尝试使用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文件适用于它).
我有我想要使用SQLAlchemy核心的烧瓶中的应用程序(即我明确不希望使用ORM),在烧瓶文档描述这个"第四条道路"类似:
http://flask.pocoo.org/docs/patterns/sqlalchemy/#sql-abstraction-layer
我想知道在以下方面推荐的模式是什么:
如何连接到我的数据库(我可以简单地将一个connection实例存储在g.db变量中before_request吗?)
如何执行反射以检索现有数据库的结构(如果可能,我希望避免显式创建任何"模型/表类")
我想为PyPI打包一个Python科学应用程序.我的问题是,它依靠的PyPI级DEPS(如numpy的,SciPy的等)以及其他必须在操作系统级别的处理:wxPython的和Python-VTK(如在Ubuntu apt-get的,自制的OSX等).
我想知道这样做的理想策略是什么,特别是哪种包装系统最适合(我目前偏爱Distribute).
鉴于这是我所期望的:
(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) (抱歉,无法抗拒双关语!)
我想知道为什么翻译似乎不可能:
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) 我正在考虑将numeric我的PG 9.2数据库模式的列转换为money,主要是因为我看到(或想象?)在数据库级别而不是应用程序级别处理舍入和格式化的好处.这个决定会有一些缺点吗?
假设我有一个包含(以及其他)不同类型的子列表的列表:
[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 ×7
clojure ×1
cookielib ×1
cookies ×1
currency ×1
dictionary ×1
flask ×1
flatten ×1
list ×1
money-format ×1
packaging ×1
pip ×1
postgresql ×1
pypi ×1
scikit-learn ×1
sqlalchemy ×1