小编Oli*_*ver的帖子

如何在分类机器学习算法中发现新类?

我正在使用多类分类器(支持向量机,通过One-Vs-All)来分类数据样本.假设我目前有n不同的课程.

但是,在我面临的场景中,新数据样本可能属于之前未见过的n+1.

所以我想你可以说我需要一种在线学习的形式,因为在开始时没有适合所有数据出现的明显训练集.相反,我需要SVM动态适应未来可能出现的新类.

所以我想知道我是否以及如何......

  1. 确定新数据样本不完全适合现有类,但应该导致创建新类.

  2. 将该新类集成到现有分类器中.

我可以模糊地想到一些可能解决这个问题的方法:

  1. 如果没有二进制SVM分类器(因为我在OVA情况下对每个类有一个)预测新数据样本的相当高的概率(例如> 0.5),我可以假设这个新数据样本可以代表新类.

  2. 我可以为该新类训练一个新的二进制分类器并将其添加到多类SVM中.

然而,这些只是我天真的想法.我想知道是否有一些"适当的"方法,例如使用聚类算法来查找所有类.

或许我尝试使用SVM的方法甚至不适合这种问题?

非常感谢帮助.

classification machine-learning svm

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

PhantomJS 2:检测未触发事件的点击

我正在使用PhantomJS 2来点击页面的元素.但是,我不知道点击这些元素是否会触发事件(例如页面加载).

我希望能够处理这两种情况:

  1. 当单击元素触发页面加载时,我想等到新页面加载完毕.

  2. 当点击不触发事件时,我希望能够识别出这一点(无需等待很长的超时).

PhantomJS 1中,我可以简单地使用这样的闭包:

function click(page, elem, callback) {
  var loading = false;

  page.set('onLoadStarted', function() {
    loading = true;
  });

  page.set('onLoadFinished', function() {
    callback('click triggered page load');
  });

  triggerClick(page, elem);

  setTimeout(function() {
    if ( ! loading) {
      callback('click did not trigger page load');
    }
  }, 100);
}
Run Code Online (Sandbox Code Playgroud)

在这里,我将关闭loading变量,该变量充当事件处理程序和函数之间的"通信通道" setTimeout.

  1. 如果单击触发页面加载,onLoadFinished处理程序将在加载页面后调用回调.

  2. 如果单击不触发页面加载,则函数setTimeout将在仅100ms后调用回调(这是可接受的).

此代码在PhantomJS 1下运行良好.

不幸的是,在PhantomJS 2下,for onLoadStarted和的事件处理程序onLoadFinished不再访问loading变量(即它们看起来不再像闭包一样工作).

所以现在我想知道如何在PhantomJS 2中实现相同的行为.任何想法?

PS:我知道我必须通过page.property(...) …

javascript phantomjs

7
推荐指数
1
解决办法
237
查看次数

在Clojure中的嵌套宏之间传递编译时状态

我正在尝试编写一个可以全局和嵌套方式使用的宏,如下所示:

;;; global:
(do-stuff 1)

;;; nested, within a "with-context" block:
(with-context {:foo :bar}
  (do-stuff 2)
  (do-stuff 3))
Run Code Online (Sandbox Code Playgroud)

当以嵌套方式使用时,do-stuff应该具有{:foo :bar}set by的权限with-context.

我已经能够像这样实现它:

(def ^:dynamic *ctx* nil)

(defmacro with-context [ctx & body]
  `(binding [*ctx* ~ctx]
     (do ~@body)))

(defmacro do-stuff [v]
  `(if *ctx*
     (println "within context" *ctx* ":" ~v)
     (println "no context:" ~v)))
Run Code Online (Sandbox Code Playgroud)

但是,我一直在努力将if内部do-stuff从运行时转移到编译时,因为无论do-stuff是从体内调用with-context还是全局调用都是在编译时已经可用的信息.

不幸的是,我无法找到解决方案,因为嵌套宏似乎在多个"宏扩展运行"中得到扩展,因此扩展时不再可用*ctx*(如设置中with-context)的动态绑定do-stuff.所以这不起作用:

(def ^:dynamic *ctx* nil)

(defmacro with-context [ctx …
Run Code Online (Sandbox Code Playgroud)

macros state nested clojure

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