目录
主要将数据集分类两类,也意味着输出变量只有两个值。比如将邮件标记为“垃圾邮件”还是“非垃圾邮件”。
数据集分为多个种类,输出变量也有多个值。比如经典的Iris数据集,根据花的花瓣长度、萼片长度、花瓣宽度和萼片宽度,分成三种花。
一种特殊类型的分类任务,对于数据集中的每个实例具有多个输出变量,也就是说,一个实例可以有多个标签。比如在图像分类中,单个的图像可能包含多个对象,这些对象可以通过算法进行标记,例如公共汽车、红绿灯、斑马线等。
不平衡分类是指数据集的实例中具有偏向或者偏态分布的分类问题,也就是一类输入变量的频率高于其他输入变量。比如通过交易数据集中的信用卡检测欺诈交易。通常,此类交易的数量要少得多,因此这会使机器难以学习此类交易。
为了解决分类问题,我们使用称为机器学习分类算法的数学模型。他们的任务是找出目标变量如何与输入特征 xi 和输出值 yi 相关联。在数学方面,估计函数 f(xi) 通过将相关特征作为输入来预测输出变量的值。我们可以这样写,
其中 y'i 表示输出变量的预测响应。
在将任何统计算法应用于数据集之前,我们必须彻底了解输入变量和输出变量。在分类问题中,目标总是定性的,但有时,甚至输入值也可以是分类的,例如著名的 Mall Customer Dataset 中客户的性别。由于分类算法是从数学上推导出来的,因此必须将所有变量转换为数值。分类算法工作的第一步是确保变量,无论是输入还是输出,都已正确编码。
处理完数据集后,下一步是将数据集分为两部分:测试数据集和训练数据集。这一步允许使用训练数据集让我们的机器学习输入和输出值之间的模式。另一方面,测试数据集测试模型的准确性,我们将尝试将其放入我们的数据集中。
一旦我们将数据集拆分为训练和测试,下一个任务就是选择最适合我们问题的模型。为此,我们需要了解流行的分类算法。因此,让我们深入研究不同类型的分类算法池并探索我们的选择。
以下是您将了解的不同类型分类算法的列表:
朴素贝叶斯分类器,最简单有效的分类算法之一。它的基础是贝叶斯定理,它描述了如何根据可能与事件相关的条件的先验知识来评估事件的概率。在数学上,这个定理指出——
其中 P(Y|X) 是事件 Y 的概率,假设 X 已经发生。
P(X) 是事件 X 的概率,
P(Y) 是事件 Y 的概率,
P(X|Y) 是给定 Y 的固定值时事件 X 的可能性。
如果 X 代表一个特征变量,Y 代表一个目标变量,那么贝叶斯分类器会将该标签分配给产生最高概率的特征。为简单起见,考虑一个二分类问题,其中特征变量只能有两个可能的值,Y=1 或 Y=0。然后,如果 Pr(Y=1|X=x0) > 0.5,贝叶斯分类器将预测类别 1,否则预测类别 2。
在不止一个特征的情况下,我们可以使用以下公式来评估概率,
我们假设两个特征 X1 和 X2 是相互独立的。事实上,由于这个假设,“朴素”这个词被附加到贝叶斯的分类器上。
该算法类似于贝叶斯分类器,因为它也预测 Y 与输入变量 X 相关联的概率。它使用逻辑函数,
并使用最大似然技术拟合参数 ð??›ƒ0 和 ð??›ƒ1。该技术涉及最大化由下式给出的似然函数
在评估这两个参数后,可以轻松地使用逻辑函数来预测给定输入 xi 的目标变量概率 p(xi)。
对于不止一个特征变量(X1, X2,..., XP),公式可以概括为
该算法涉及根据数据集中的某些特征变量将数据集划分为多个段。这些划分的阈值通常是各自特征变量的平均值或众数(如果它们是数字)。由于树可以表示用于分割数据集的一组分割规则,因此该算法称为决策树。
查看下面的示例以更好地理解它。

红色文本表示如何根据输出变量将数据集拆分为多个段。结果是具有最高比例的班级。
现在,很自然要问的问题是该算法使用什么标准来分割数据。有两种广泛使用的度量来测试分割的纯度(如果数据集的片段只有一个类的数据点,则它是纯的)。
第一个是定义的基尼指数
测量 N 个类别的总方差。另一种度量是交叉熵,定义为
在两个等式中,pmk 表示第 m 个片段中属于第 k 个类别的训练变量的比例。
我们根据该特征将数据集拆分为多个段,从而产生熵或基尼指数的最小值。
森林由大量的树木组成。同样,随机森林涉及处理许多决策树。每棵树预测目标变量的概率值。然后我们对产生最终输出的概率进行平均。
我们评估每棵树如下:
该算法利用具有令人兴奋的变化的支持向量分类器,使其适用于评估非线性决策边界。通过使用称为kernels 的特殊函数扩大特征变量空间,这成为可能 。该算法考虑的决策边界允许将特征变量标记为目标变量。它用于评估边界的数学函数由下式给出
其中 K 代表核函数。
KNN 算法通过识别给定观察点的 K 个最近邻居来工作。然后它使用 K 个点评估每种类型的目标变量的比例,然后预测具有最高比例的目标变量。例如,考虑以下情况,我们必须将目标值标记为点 X。然后,如果我们在它周围取四个邻居,该模型将预测该点属于粉红色的类。

K-Means Clustering 是一种将数据集划分为 K 个不重叠的组的聚类算法。该算法的第一步是指定预期的簇数 K。然后,任务是将数据集划分为 K 个簇,以使簇内变化尽可能小。算法过程如下:
总之,该算法最小化输入点与相应聚类质心之间的偏差平方和。将其命名为 K 均值聚类的原因是步骤 2a) 将属于特定聚类的观测值的均值评估为聚类质心。
下面我们有一个列表,可以帮助您了解应该使用哪些分类算法来解决业务问题。
总的来说,我对ruby还比较陌生,我正在为我正在创建的对象编写一些rspec测试用例。许多测试用例都非常基础,我只是想确保正确填充和返回值。我想知道是否有办法使用循环结构来执行此操作。不必为我要测试的每个方法都设置一个assertEquals。例如:describeitem,"TestingtheItem"doit"willhaveanullvaluetostart"doitem=Item.new#HereIcoulddotheitem.name.shouldbe_nil#thenIcoulddoitem.category.shouldbe_nilendend但我想要一些方法来使用
我试图在一个项目中使用rake,如果我把所有东西都放到Rakefile中,它会很大并且很难读取/找到东西,所以我试着将每个命名空间放在lib/rake中它自己的文件中,我添加了这个到我的rake文件的顶部:Dir['#{File.dirname(__FILE__)}/lib/rake/*.rake'].map{|f|requiref}它加载文件没问题,但没有任务。我现在只有一个.rake文件作为测试,名为“servers.rake”,它看起来像这样:namespace:serverdotask:testdoputs"test"endend所以当我运行rakeserver:testid时
作为我的Rails应用程序的一部分,我编写了一个小导入程序,它从我们的LDAP系统中吸取数据并将其塞入一个用户表中。不幸的是,与LDAP相关的代码在遍历我们的32K用户时泄漏了大量内存,我一直无法弄清楚如何解决这个问题。这个问题似乎在某种程度上与LDAP库有关,因为当我删除对LDAP内容的调用时,内存使用情况会很好地稳定下来。此外,不断增加的对象是Net::BER::BerIdentifiedString和Net::BER::BerIdentifiedArray,它们都是LDAP库的一部分。当我运行导入时,内存使用量最终达到超过1GB的峰值。如果问题存在,我需要找到一些方法来更正我的代
Rails2.3可以选择随时使用RouteSet#add_configuration_file添加更多路由。是否可以在Rails3项目中做同样的事情? 最佳答案 在config/application.rb中:config.paths.config.routes在Rails3.2(也可能是Rails3.1)中,使用:config.paths["config/routes"] 关于ruby-on-rails-Rails3中的多个路由文件,我们在StackOverflow上找到一个类似的问题
我需要从一个View访问多个模型。以前,我的links_controller仅用于提供以不同方式排序的链接资源。现在我想包括一个部分(我假设)显示按分数排序的顶级用户(@users=User.all.sort_by(&:score))我知道我可以将此代码插入每个链接操作并从View访问它,但这似乎不是“ruby方式”,我将需要在不久的将来访问更多模型。这可能会变得很脏,是否有针对这种情况的任何技术?注意事项:我认为我的应用程序正朝着单一格式和动态页面内容的方向发展,本质上是一个典型的网络应用程序。我知道before_filter但考虑到我希望应用程序进入的方向,这似乎很麻烦。最终从任何
我在我的项目中添加了一个系统来重置用户密码并通过电子邮件将密码发送给他,以防他忘记密码。昨天它运行良好(当我实现它时)。当我今天尝试启动服务器时,出现以下错误。=>BootingWEBrick=>Rails3.2.1applicationstartingindevelopmentonhttp://0.0.0.0:3000=>Callwith-dtodetach=>Ctrl-CtoshutdownserverExiting/Users/vinayshenoy/.rvm/gems/ruby-1.9.3-p0/gems/actionmailer-3.2.1/lib/action_mailer
刚入门rails,开始慢慢理解。有人可以解释或给我一些关于在application_controller中编码的好处或时间和原因的想法吗?有哪些用例。您如何为Rails应用程序使用应用程序Controller?我不想在那里放太多代码,因为据我了解,每个请求都会调用此Controller。这是真的? 最佳答案 ApplicationController实际上是您应用程序中的每个其他Controller都将从中继承的类(尽管这不是强制性的)。我同意不要用太多代码弄乱它并保持干净整洁的态度,尽管在某些情况下ApplicationContr
我想向我的Controller传递一个参数,它是一个简单的复选框,但我不知道如何在模型的form_for中引入它,这是我的观点:{:id=>'go_finance'}do|f|%>Transferirde:para:Entrada:"input",:placeholder=>"Quantofoiganho?"%>Saída:"output",:placeholder=>"Quantofoigasto?"%>Nota:我想做一个额外的复选框,但我该怎么做,模型中没有一个对象,而是一个要检查的对象,以便在Controller中创建一个ifelse,如果没有检查,请帮助我,非常感谢,谢谢
我注意到像bundler这样的项目在每个specfile中执行requirespec_helper我还注意到rspec使用选项--require,它允许您在引导rspec时要求一个文件。您还可以将其添加到.rspec文件中,因此只要您运行不带参数的rspec就会添加它。使用上述方法有什么缺点可以解释为什么像bundler这样的项目选择在每个规范文件中都需要spec_helper吗? 最佳答案 我不在Bundler上工作,所以我不能直接谈论他们的做法。并非所有项目都checkin.rspec文件。原因是这个文件,通常按照当前的惯例,只
我正在使用active_admin,我在Rails3应用程序的应用程序中有一个目录管理,其中包含模型和页面的声明。时不时地我也有一个类,当那个类有一个常量时,就像这样:classFooBAR="bar"end然后,我在每个必须在我的Rails应用程序中重新加载一些代码的请求中收到此警告:/Users/pupeno/helloworld/app/admin/billing.rb:12:warning:alreadyinitializedconstantBAR知道发生了什么以及如何避免这些警告吗? 最佳答案 在纯Ruby中:classA