我很难理解class_weightscikit-learn的Logistic回归中的参数是如何运作的.
情况
我想使用逻辑回归对非常不平衡的数据集进行二进制分类.类别标记为0(负)和1(正),观察数据的比例约为19:1,大多数样本具有负结果.
第一次尝试:手动准备训练数据
我将我拥有的数据拆分为不相交的集合进行培训和测试(约80/20).然后我手动随机抽取训练数据,得到不同比例的训练数据,比例为19:1; 从2:1 - > 16:1.
然后,我在这些不同的训练数据子集上训练逻辑回归,并绘制召回(= TP /(TP + FN))作为不同训练比例的函数.当然,召回是根据观察到的比例为19:1的不相交TEST样本计算的.请注意,虽然我在不同的训练数据上训练了不同的模型,但我在相同(不相交)的测试数据上计算了所有这些模型的回忆.
结果如预期的那样:召回率为2:1的训练比例约为60%,并且在达到16:1时下降得相当快.有几个比例为2:1 - > 6:1,召回率高于5%.
第二次尝试:网格搜索
接下来,我想测试不同的正则化参数,所以我使用了GridSearchCV并制作了一个C参数的几个值的网格class_weight.将我的n:m比例的负面:正面训练样本翻译成字典语言,class_weight我认为我只是指定了几个字典,如下所示:
{ 0:0.67, 1:0.33 } #expected 2:1
{ 0:0.75, 1:0.25 } #expected 3:1
{ 0:0.8, 1:0.2 } #expected 4:1
Run Code Online (Sandbox Code Playgroud)
我也包括None和auto.
这次结果完全被摧毁了.对于class_weight除了的每个值,我的所有召回都很小(<0.05)auto.所以我只能假设我对如何设置class_weight字典的理解是错误的.有趣的是,class_weight网格搜索中'auto' 的值对于所有值都是59%左右C,我猜它平衡为1:1?
我的问题
1)如何正确使用class_weight来实现训练数据的不同平衡,从实际给出的数据?具体来说,我传给什么词典class_weight使用n:m比例的负面:正面训练样本?
2)如果您将各种class_weight词典传递给GridSearchCV,在交叉验证期间它会根据字典重新平衡训练折叠数据,但是使用真实的给定样本比例来计算测试折叠上的评分函数?这是至关重要的,因为任何度量标准仅对我有用,如果它来自观察到的比例的数据.
3)就比例而言auto,class_weight做什么的价值是多少?我阅读了文档,我假设"平衡数据与它们的频率成反比"只是意味着它以1:1的比例.它是否正确?如果没有,有人可以澄清吗?
非常感谢,任何澄清将不胜感激!
我有一个原始的YUV视频文件,我想在Adobe CS6 Premiere中进行一些基本的编辑,但它无法识别该文件.我想用ffmpeg把它转换成Premiere会接受的东西,但我希望这是无损的,因为之后我会再次以YUV格式需要它.我想到了avi,mov和prores,但我似乎无法弄清楚ffmpeg的正确命令行以及如何确保它是无损的.
谢谢你的帮助.
我主要通过笔记本电脑使用iPython,也使用终端.我刚刚运行创建了默认配置文件ipython profile create.
我似乎无法弄清楚如何使配置文件运行我每次使用的几个魔术命令.我试着在网上和我正在阅读的一本书中看到这个,但却无法让它发挥作用.例如,如果我想%debug为每个新笔记本激活,我尝试将这些行添加到我的配置文件中:
c.InteractiveShellApp.extensions = ['debug']
Run Code Online (Sandbox Code Playgroud)
要么
c.TerminalPythonApp.extensions = ['debug']
Run Code Online (Sandbox Code Playgroud)
我要么输入导入错误,要么一无所获.我(密切相关)的问题如下:
我要添加到我的ipython配置文件以激活魔术命令的哪一行?有些需要参数,例如%reload_ext autoreload和%autoreload 2.我如何在配置文件中传递这些参数?
我可以将单个配置文件中的终端与笔记本添加的内容分开,或者如果我想激活不同的魔法,我必须设置单独的配置文件吗?(例如,matplotlib内联或不内联).以上两行是否会影响笔记本电脑与终端设置(即c.InteractiveShellAppvs. c.TerminalPythonApp)?
谢谢!
我正在使用urllib2抓取 url 的 html,然后使用正则表达式从那里提取我需要的 JSON。我想获得通常的“字典字典”Python 对象和以下两个工作:
my_json #a correctly formatted json string
json_dict1 = json.JSONDecoder().decode(my_json)
json_dict2 = json.loads(my_json)
Run Code Online (Sandbox Code Playgroud)
在什么情况下有什么区别,哪个更好(除了我的,但特别是那个)?
我正在尝试在我的网络应用程序上上传一个基本的文本/csv 文件,该应用程序运行 Flask 来处理 http 请求。我尝试遵循在本地主机上运行的烧瓶文档中的婴儿示例。但是,当我在页面上尝试此代码时,它似乎已上传,但随后挂起,实际上我的 Flask 服务器冻结了,我必须关闭终端才能重试...Ctrl+C 甚至不起作用。
我执行run.py:
#!/usr/bin/env python
from app import app
if __name__ == '__main__':
app.run(host='0.0.0.0', port=5000, debug=False, use_reloader=False)
Run Code Online (Sandbox Code Playgroud)
是与以下内容位于app同一目录中的目录:run.py__init__.py
import os
from flask import Flask
from werkzeug import secure_filename
#Flask object initialization
#app flask object has to be created before importing views below
#because it calls "import app from app"
UPLOAD_FOLDER = '/csv/upload'
ALLOWED_EXTENSIONS = set(['txt', 'csv'])
app = Flask(__name__)
app.config['UPLOAD_FOLDER'] = UPLOAD_FOLDER
Run Code Online (Sandbox Code Playgroud)
这是我的views.py文件,其中包含我的所有路线: …
我在AWS Elastic Beanstalk上运行了一个django应用程序.我使用一个nltk语料库包(stopwords),我通过使用NLTK下载器获得.
为了快速入侵,我只是在当前(单个)弹性beanstalk EC2实例上运行了nltk下载器,并将所需的语料库保存到/usr/local/share/nltk_data.这适用于单个实例,但显然当我的负载均衡器决定创建新实例时,这将被擦除(它在部署中幸存).
我的问题是这里专门针对这些数据的最佳方法是什么?
我应该将它存储在S3上并将其与弹性豆茎相连吗?
或者,编写一个(python?)脚本会更容易(也更好),该脚本将由EB配置为每个新实例调用,该实例将下载数据并将数据放入应用程序可访问的文件夹中(在实例的生命周期内) )?这样,如果我需要添加其他语料库下载或执行python特定或nltk特定的事情,它发生在python中而不需要手动S3工作?
如果有人支持为EB配置编写脚本,那么一个例子会很棒,我不确定如何准确地执行此操作.
谢谢!
我在AWS Elastic Beanstalk上运行一个Django Web应用程序,需要运行它的特定文件(实际上是一个nltk停用词语料库).由于实例来来去去,我将所需的文件夹复制到我的弹性beanstalk创建的S3存储桶中,并计划使用awscli弹性beanstalk配置文件添加复制命令.但我无法让它发挥作用.
我的beanstalk启动的实例应具有对S3存储桶的读访问权限,因为这是由beanstalk自动创建的存储桶.所以beanstalk还创建了一个IAM角色aws-elasticbeanstalk-ec2-role,它是一个附加到它启动的每个实例的实例配置文件.此角色包括AWSElasticBeanstalkWebTier似乎同时授予对S3存储桶的读写访问权限的策略:
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "BucketAccess",
"Action": [
"s3:Get*",
"s3:List*",
"s3:PutObject"
],
"Effect": "Allow",
"Resource": [
"arn:aws:s3:::elasticbeanstalk-*",
"arn:aws:s3:::elasticbeanstalk-*/*"
]
}
]
}
Run Code Online (Sandbox Code Playgroud)
我尝试将以下命令添加到.ebextensions/my_app.config:
commands:
01_copy_nltk_data:
command: aws s3 cp s3://<my_bucket>/nltk_data /usr/local/share/
Run Code Online (Sandbox Code Playgroud)
但是当我尝试部署时出现以下错误,即使我可以在S3控制台中看到该文件夹
Command failed on instance. Return code: 1 Output: An error occurred (404) when calling the HeadObject operation: Key "nltk_data" does not exist
Run Code Online (Sandbox Code Playgroud)
有任何想法吗?
谢谢!
amazon-s3 amazon-ec2 amazon-web-services amazon-elastic-beanstalk
我正在一个IPython笔记本中的原型,它从我的计算机上的模块加载Python2代码.我激活了重新加载魔术命令,以便在我进行代码更改并重新运行单元格以查看其影响时,更容易在文本编辑器和笔记本之间来回切换:
%reload_ext autoreload
%autoreload 2
Run Code Online (Sandbox Code Playgroud)
我在Python 2.7.10中工作,因为我使用了一些不能编译的遗留代码.我的部分工作是扩展这些遗留代码中的一些类并重载它们的一些方法.但是,我还需要调用一些原始的基本方法来完成重要的工作.例如:
class LegacyBase:
def important_method(self):
#old stuff i'll need
class NewClass(LegacyBase):
#overload base method
def important_method(self):
#do some new stuff
while 1:
#call old method to do stuff
super(NewClass, self).important_method() #use old Python2 super calls :(
#some break conditions
Run Code Online (Sandbox Code Playgroud)
当我第一次在我的笔记本中调用important_method()某个NewClass实例时(意味着,在内核重置后),它运行正常.循环使得super呼叫不止一次发生!没有错误
但是,如果我去修改一些代码来我的新方法,在我的文本编辑器,并回到IPython的细胞并再次调用它,我得到以下错误在我的重载线路important_method(),其中super呼叫.
TypeError: super(type, obj): obj must be an instance or subtype of type
Run Code Online (Sandbox Code Playgroud)
注意:我尝试将新方法命名为另一个名称,因为我认为这与重载方法再次调用自身有关,但这没有帮助.此外,我希望它们是相同的名称,因为这是一个API方法,我希望遗留代码的用户能够调用他们之前知道的相同方法.
知道如何使用这些Python2 super调用在IPython笔记本中重新加载吗?
谢谢!
我在清理正在运行的私有 docker 注册表中的磁盘空间时遇到问题。我也无法理解 Docker API 调用返回的所有不同的摘要 SHA。
我的私人 docker 注册表设置为.../docker/registry/v2它包含两个文件夹:blobs(~1.4GB)和repositories(~944KB)。我已经在那里推送了几个存储库和多个标签。
起初,我只需要删除前端显示的某些 API 调用返回的存储库/标签,但现在我需要释放磁盘空间,但不知道如何操作。
1.删除Repo和标签名称(装饰)
我通过解析每个存储库的 Docker API 调用结果,在用户前端列出了 Docker 存储库及其标签GET /_catalog。GET /<repo name>/tags/list有时我需要删除一些东西,这样它们就不会出现在这个列表中,我可以通过以下方法来做到这一点。
GET /<repo name>/manifests/<tag>
DELETE /<repo name>/manifests/<digest SHA in headers.Docker-Content-Digest of the above response>
我不确定这是正确的方法,但我需要以某种方式控制前端显示,这目前已经有效。
此操作会将本地文件夹的大小减少repositories几 KB,但不会影响该blobs文件夹。
2. 清理磁盘空间并真正删除存储库
我陷入困境的是如何真正释放目录占用的大量磁盘空间blobs。:和各种GET /<repo name>/manifests/<tag>.返回许多不同的摘要 SHA 。body.config.digestbody.layers[i].digest
我尝试DELETE /<repo name>/blobs/<some digest>在这些不同的摘要上执行。对于某些人来说它是成功的,对于其他人来说它说找不到 blob。成功后,repositories目录大小会减少几 KB,但blobs目录大小不会改变。
我只是在点击后才尝试这样做,DELETE …
我正在尝试使用scipy.optimize.curve_fit来拟合模型函数,但以下代码给了我以下错误:
from scipy.optimize import curve_fit
from math import log10
def my_func(x, alpha):
return [10*log10(alpha*y*y) for y in x]
known_x = [1039.885254, 2256.833008, 6428.667969, 30602.62891] #known x-values
known_y = [31.87999916, 33.63000107, 35, 36.74000168]
popt, pcov = curve_fit(my_func, known_x, known_y)
Run Code Online (Sandbox Code Playgroud)
我得到的错误是:
TypeError: unsupported operand type(s) for -: 'list' and 'list'
Run Code Online (Sandbox Code Playgroud)
我知道已经在这里和这里提出了相关问题,但我无法从这些答案中解决我的问题。
我没有仔细检查的,该参数的类型curve_fit发送到我的功能,我看到那alpha就会出现,numpy.float64并x作为list
谢谢你的帮助。
这是回溯错误:
Traceback (most recent call last):
File "test.py", line 10, in <module> …Run Code Online (Sandbox Code Playgroud) python ×7
amazon-ec2 ×2
amazon-s3 ×2
docker ×1
ffmpeg ×1
flask ×1
ipython ×1
json ×1
python-2.7 ×1
scikit-learn ×1
scipy ×1
super ×1
yuv ×1