小编sev*_*ian的帖子

帮助 - LibSVM的准确率达到100%?

名义上是一个很好的问题,但我很确定这是因为有趣的东西正在发生......

作为背景,我正在处理面部表情/识别空间中的问题,因此获得100%的准确性似乎令人难以置信地难以置信(并非在大多数应用程序中都是合理的......).我猜测数据集中存在一些一致的偏差,它使得SVM过于容易地得出答案,=或=,更可能的是,我在SVM方面做错了.

我正在寻找建议,以帮助了解发生了什么 - 是我(=我对LibSVM的使用)?还是数据?

细节:

  • 大约~2500个标记的数据向量/实例(个体的变换视频帧 - 总共<20个人),二进制分类问题.~900个功能/实例.不平衡数据的比率约为1:4.
  • Ran subset.py将数据分成测试(500个实例)和训练(剩余).
  • 跑"svm-train -t 0".(注意:显然不需要'-w1 1 -w-1 4'......)
  • 在测试文件上运行svm-predict.准确度= 100%!

事情尝试:

  • 通过一些无意的命令行参数错误检查了大约10次我没有训练和测试相同的数据文件
  • 多次重新运行subset.py(甚至使用-s 1)并且仅训练/测试多个不同的数据集(如果我随机地在最神奇的火车/测试pa上
  • 运行一个简单的diff-like检查以确认测试文件不是训练数据的子集
  • 数据上的svm-scale对精度没有影响(准确度= 100%).(尽管支持向量的数量确实从nSV = 127下降,bSV = 64到nBSV = 72,bSV = 0.)
  • ((奇怪))使用默认的RBF内核(副线性 - 即删除'-t 0')导致准确转为垃圾(?!)
  • (健全性检查)使用针对未缩放数据集的缩放数据集训练的模型运行svm-predict导致精度= 80%(即,它总是猜测主导类).这绝对是一个健全性检查,以确保svm-predict在名义上在我的机器上正常运作.

暂定结论?:

数据集的某些东西已经被摧毁 - 不知何故,在数据集中,SVM正在汲取一种微妙的,实验者驱动的效果.

(首先,这不解释为什么RBF内核会产生垃圾结果.)

非常感谢任何建议:a)如何修复我对LibSVM的使用(如果这实际上是问题)或b)确定LibSVM数据中的哪些微妙的实验者偏见正在接受.

artificial-intelligence machine-learning svm computer-vision libsvm

13
推荐指数
2
解决办法
4959
查看次数

Python Pandas - 合并大多数重复的行

我的一些数据看起来像:

date, name, value1, value2, value3, value4
1/1/2001,ABC,1,1,,
1/1/2001,ABC,,,2,
1/1/2001,ABC,,,,35
Run Code Online (Sandbox Code Playgroud)

我试图达到可以运行的程度

data.set_index(['date', 'name'])
Run Code Online (Sandbox Code Playgroud)

但是,随着数据的原样,当然有重复(如上所示),所以我不能这样做(我不希望索引有重复,我不能简单地drop_duplicates(),因为这会丢失数据).

我希望能够将具有相同[日期,名称]值的行强制为单个行,如果它们可以基于某些值NaN成功收敛(类似于combine_first()的行为).例如,上述内容将最终结束

date, name, value1, value2, value3, value4
1/1/2001,ABC,1,1,2,35
Run Code Online (Sandbox Code Playgroud)

如果两个值不同且一个不是NaN,那么这两行不应该收敛(这可能是我需要跟进的错误).

(为了扩展上面的例子,实际上可能有任意数量的行 - 给定任意数量的列 - 应该能够汇聚成一行.)

这感觉就像是一个应该通过熊猫解决的问题,但我无法找到一个优雅的解决方案.

python duplicates dataframe pandas

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

无法上传> ~2GB到Google云端存储

跟踪下面.

相关的Python代码段:

bucket = _get_bucket(location['bucket'])
blob = bucket.blob(location['path'])
blob.upload_from_filename(source_path)
Run Code Online (Sandbox Code Playgroud)

最终触发(来自ssl库):

OverflowError:字符串长度超过2147483647个字节

我假设有一些特殊配置选项我不见了?

这可能与这个~1.5岁的显然尚未解决的问题有关:https://github.com/googledatalab/datalab/issues/784.

帮助赞赏!

完整跟踪:

[文件"/usr/src/app/gcloud/download_data.py",第109行,在*******blob.upload_from_filename(source_path)

在upload_from_filename size = total_bytes中输入文件"/usr/local/lib/python3.5/dist-packages/google/cloud/storage/blob.py",第992行

在upload_from_file客户端,file_obj,content_type,size,num_retries中输入文件"/usr/local/lib/python3.5/dist-packages/google/cloud/storage/blob.py",第946行

文件"/usr/local/lib/python3.5/dist-packages/google/cloud/storage/blob.py",第867行,在_do_upload客户端,流,content_type,size,num_retries)

文件"/usr/local/lib/python3.5/dist-packages/google/cloud/storage/blob.py",第700行,_do_multipart_upload传输,data,object_metadata,content_type)

文件"/usr/local/lib/python3.5/dist-packages/google/resumable_media/requests/upload.py",第97行,发送时retry_strategy = self._retry_strategy)

在http_request func,RequestsMixin._get_status_code,retry_strategy中输入文件"/usr/local/lib/python3.5/dist-packages/google/resumable_media/requests/_helpers.py",第101行

在wait_and_retry response = func()中输入文件"/usr/local/lib/python3.5/dist-packages/google/resumable_media/_helpers.py",第146行

文件"/usr/local/lib/python3.5/dist-packages/google/auth/transport/requests.py",第186行,请求方法,url,data = data,headers = request_headers,**kwargs)

文件"/usr/local/lib/python3.5/dist-packages/requests/sessions.py",第508行,请求resp = self.send(prep,**send_kwargs)

文件"/usr/local/lib/python3.5/dist-packages/requests/sessions.py",第618行,发送r = adapter.send(请求,**kwargs)

文件"/usr/local/lib/python3.5/dist-packages/requests/adapters.py",第440行,发送超时=超时

文件"/usr/local/lib/python3.5/dist-packages/urllib3/connectionpool.py",第601行,在urlopen chunked = chunked中)

文件"/usr/local/lib/python3.5/dist-packages/urllib3/connectionpool.py",第357行,在_make_request conn.request(method,url,**httplib_request_kw)中

文件"/usr/lib/python3.5/http/client.py",第1106行,请求self._send_request(方法,url,正文,标题)

文件"/usr/lib/python3.5/http/client.py",第1151行,在_send_request self.endheaders(body)中

文件"/usr/lib/python3.5/http/client.py",第1102行,在endheaders中self._send_output(message_body)

在_send_output self.send(message_body)中输入文件"/usr/lib/python3.5/http/client.py",第936行

在send self.sock.sendall(data)中输入文件"/usr/lib/python3.5/http/client.py",第908行

在sendall v = self.send(data [count:])中输入文件"/usr/lib/python3.5/ssl.py",第891行

文件"/usr/lib/python3.5/ssl.py",第861行,发送返回self._sslobj.write(data)

文件"/usr/lib/python3.5/ssl.py",第586行,写入返回self._sslobj.write(data)

OverflowError:字符串长度超过2147483647个字节

python google-cloud-storage

5
推荐指数
1
解决办法
951
查看次数

Beam / Dataflow设计模式可根据数据库查询来丰富文档

评估数据流,并试图找出是否/如何执行以下操作。

我很抱歉,如果上面的内容微不足道,请在我们决定使用Beam或Spark等其他东西之前,先将头绕在Dataflow上。

一般用例用于机器学习:

  • 摄取单独处理的文档。

  • 除了易于编写的转换,我们还要基于对数据库(主要是键值存储)的查询来丰富每个文档。

  • 一个简单的例子是地名词典:将文本分解为ngram,然后检查这些ngram是否驻留在某个数据库中,并记录(在原始文档的转换版本中)给定短语映射到的实体标识符。

如何有效地做到这一点?

天真(尽管可能对序列化要求很棘手?):

每个文档都可以简单地单独查询数据库(类似于通过Google DataFlow Transformer查询关系数据库),但是,鉴于大多数文件都是简单的键值存储,因此似乎应该有一种更有效的方法(鉴于数据库查询延迟的实际问题)。

场景1:已改进?:

当前的稻草人将表存储在Bigquery中,将它们拉下来(https://github.com/apache/beam/blob/master/sdks/python/apache_beam/io/gcp/bigquery.py),然后将它们用作侧面输入,用作每个文档函数中的键值查找。

键值表的范围通常从很小到不大(100 MB,甚至是低GB)。 多个CoGroupByKey具有相同的apache光束(“侧面输入可以任意大-没有限制;我们已经看到使用1 + TB大小的侧面输入成功地运行了管道”)表明这是合理的,至少从POV大小而言。

1)这有意义吗?这是此方案的“正确”设计模式吗?

2)如果这是一个好的设计模式...我该如何实际实现呢?

https://github.com/apache/beam/blob/master/sdks/python/apache_beam/io/gcp/bigquery.py#L53显示将结果作为AsList馈入文档功能。

i)大概,AsDict在这里更适合上述用例?因此,我可能需要首先在Bigquery输出上运行一些转换,以将其分成键,值元组;并确保密钥是唯一的;然后将其用作侧面输入。

ii)然后我需要在函数中使用侧面输入。

我不清楚的是:

  • 对于这两个方面,如何处理Bigquery拉动产生的输出对我来说还是很模糊的。我将如何完成(i)(假设有必要)?意思是,数据格式是什么样的(原始字节?字符串?我可以研究一个很好的例子吗?)

  • 同样,如果AsDict是将其传递给func的正确方法,我是否可以引用通常在python中使用的dict这样的内容?例如,side_input.get('blah')吗?

场景2:进一步改善了吗?(针对特定情况):

  • 上面的场景(如果可以实现的话)肯定确实是高级连续远程调用(考虑到简单的键值查找),这对于我们的某些场景非常有帮助。但是,如果我采用类似地名词典查找的方案(如上)……是否有更优化的解决方案?

像这样,对于每个文档,将我们所有的ngram都写为键,将值作为基础索引(文档中的docid + indices),然后在这些ngram和gazeteer中的短语之间进行某种连接...然后进行另一组转换以恢复原始文档(现在带有新注释)。

即,让Beam直接处理所有联接/查找吗?

从理论上讲,Beam比在每个文档中循环遍历所有ngram并检查ngram是否在side_input中的速度要快得多。

其他关键问题:

3)如果这是做事的好方法,是否有任何技巧可以使它在流媒体情况下正常工作?其他地方的文字表明,在批处理方案之外,侧面输入缓存的工作效果更差。目前,我们专注于批量处理,但是流式传输在提供实时预测方面将变得至关重要。

4)是否有任何与Beam有关的原因可以为上述任何原因选择Java> Python?我们已经有大量现有的Python代码移至Dataflow,因此会非常喜欢Python ...但不确定上面的Python是否存在任何隐藏问题(例如,我注意到Python不支持某些功能或I / O)。

编辑:稻草人?对于示例ngram查找场景(应大力推广到常规K:V查找)

  • 短语=从bigquery获取
  • Docs(由docid编制索引)(例如,来自文本或protobufs的直接输入)
  • 转换:词组->(短语,实体)元组
  • 转换:docs-> ngrams(短语,docid,坐标[在文档中])
  • CoGroupByKey key =短语:(短语,实体,docid,coords)
  • CoGroupByKey key = docid,group((短语,实体,docid,coords),Docs)
  • 然后,我们可以使用(短语,实体,docid,coords)和每个文档的集合来迭代地完成每个文档

google-cloud-dataflow apache-beam

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