二战时英国的反***战备是英国为了抵抗可能发生的德军***,而于1940年和1941年间做出的准备。在这期间,英国政府建立了英国国土警卫队,并在英国全境修建了防御工事。在缺少重型装备的情况下,英军需要将手中的一切可用资源运用到极致。
由于在不列颠空战中战败,德国为***英国而开展的海狮计划遭到了无限期的推延。英国也就没能在其本土与德国陆军展开战斗。今天,英国修建的大部分防御工事都已消失,只有一些加固过的混凝土工事还较常见。
自不列颠空战正式打响开始,英国皇家空军和海军航空兵就肩负起了保卫英国领空的任务。它们与德国空军进行了激烈的战斗以使英国上空的制空权不被敌人夺走,而制空权是纳粹德国非常看重的。
如果德国空军成功地占领了英国领空,那么英国空军剩余的极少数飞机将会转移到英格兰东南部的机场。英国人在撤走时会将机场的跑道破坏掉。这些飞机将会与英国皇家海军一起打击德国舰队。尽管还未夺取制空权的德国空军比英国空军强大,但英国战机也有优势,它们大多是在己方领空执行任务,而每次任务的持续时间也会比跨越海峡飞来的德军战机长。
英国空军将所有还能飞的战斗机都调用了起来。而战斗机以外的其它飞机都被改装成了轰炸机,一些新飞行员也会开着拥有简易投弹装置的教练机对德占区进行轰炸。[11]
二战开始之前,英国在英格兰南部修建了一套雷达系统,其中有三座雷达站从1937年起开始运行。[12][13]尽管德军高层对英国此举有所怀疑,但德国空军并没有做出实际行动。后来正是这些雷达站挽救了英国。
ROC接收器操作特性曲线特点
用sensitivity和specificity解释ROC图
AUC 始终介于 0 和 1 之间,AUC的值越接近1,表示模型区分能力越好,AUC的值越接近0,模型区分能力越差,AUC的值等于0.5,表示模型区分能力是随机的。
TP,FP,FN,TN与ROC关系图如下
蓝色表示不接受,红色表示接受。我们用软件对两种颜色重叠不同位置时,观察左上角ROC曲线变化和阈值变化。
这种roc很难区别分类,两种颜色基本重叠,AUC值接近0.5
ROC应用
ROC应用1
我们必须对属于 A 类或 B 类的产品进行分类。
ROC 应用2
面试,(+)表示适合工作的候选人,(-)表示不适合工作的候选人。
ROC 应用3
ROC曲线常用于医疗领域,特别是判断仪器检测效果。ROC能很容易地查出任意界限值时的对疾病的识别能力。
选择最佳的诊断界限值。ROC曲线越靠近左上角,试验的准确性就越高。最靠近左上角的ROC曲线的点是错误最少的最好阈值,其假阳性和假阴性的总数最少。
两种或两种以上不同诊断试验对疾病识别能力的比较。在对同一种疾病的两种或两种以上诊断方法进行比较时,可将各试验的ROC曲线绘制到同一坐标中,以直观地鉴别优劣,靠近左上角的ROC曲线所代表的受试者工作最准确。亦可通过分别计算各个试验的ROC曲线下的面积(AUC)进行比较,哪一种试验的 AUC最大,则哪一种试验的诊断价值最佳。
更详细混淆矩阵图如下
混淆矩阵里概念比较相似,相同指标有不同术语,为了让大家更好立即回血矩阵,我附上混淆矩阵英文图谱,如下图:
准确率是一种非常常见的模型效能度量指标,然而当面对样本不平衡问题时,其度量效果会产生问题。比如在一个总样本中,1类样本占90%,0类样本占10%,样本严重不平衡,此时我们只需要将全部样本预测为1即可得到高达90%的准确率。
指标间关系
用条件概率理解混合矩阵容易得多
sensitivity:真阳性条件下,测试也是阳性
specificity:真阴性条件下,测试也是阴性
FALSE positive:真阴性条件下,测试却是阳性
FALSE negative:真阳性条件下,测试却是阴性
只要全部认定为阳性,敏感度就是百分之百,但说明调高敏感度同时,假阳性概率也会随之提高
ROC的Excel计算逻辑
ROC可以用Excel来计算,具体计算逻辑举例如下图:
#原创公众号(python风控模型)
from sklearn.datasets import make_classification
from sklearn.linear_model import LogisticRegression
X, y = make_classification(n_samples=10000, n_features=10, n_classes=2, n_informative=5)
Xtrain = X[:9000]
Xtest = X[9000:]
ytrain = y[:9000]
ytest = y[9000:]
clf = LogisticRegression()
clf.fit(Xtrain, ytrain)
好的,现在我们有了我们的模型,我们可以计算 ROC 曲线了。 非常简单——从 scikit-learn 导入 roc_curve,传入我们测试集中的实际 y 值以及这些相同记录的预测概率。结果将产生您的 FPR 和 TPR。 将它们传递给 ggplot 和 BAM! 你有一个漂亮的 ROC 曲线。
from sklearn import metrics
import pandas as pd
from ggplot import *
preds = clf.predict_proba(Xtest)[:,1]
fpr, tpr, _ = metrics.roc_curve(ytest, preds)
df = pd.DataFrame(dict(fpr=fpr, tpr=tpr))
ggplot(df, aes(x='fpr', y='tpr')) +\
geom_line() +\
geom_abline(linetype='dashed')
最后计算AUC:
auc = metrics.auc(fpr,tpr)
ggplot(df, aes(x='fpr', ymin=0, ymax='tpr')) +\
geom_area(alpha=0.2) +\
geom_line(aes(y='tpr')) +\
ggtitle("ROC Curve w/ AUC=%s" % str(auc))
我们得到 0.900。回顾之前,AUC 在 0 和 1 之间有界,所以这很不错。
ROC 曲线的R代码
在 R 中计算 ROC 曲线在 R 中制作 ROC 曲线也很容易。 我强烈推荐使用 ROCR 包。 它为您完成了所有艰苦的工作,并制作了一些非常漂亮的图表。对于模型,我们将构建一个分类器,该分类器使用逻辑回归模型来预测钻石数据集中的记录是否超过 2400 美元。
#原创公众号(python风控模型)
library(ggplot2)
diamonds$is_expensive <- diamonds$price > 2400
is_test <- runif(nrow(diamonds)) > 0.75
train <- diamonds[is_test==FALSE,]
test <- diamonds[is_test==TRUE,]
summary(fit <- glm(is_expensive ~ carat + cut + clarity, data=train))
Using ROCR, making the charts is relatively simple.
library(ROCR)
prob <- predict(fit, newdata=test, type="response")
pred <- prediction(prob, test$is_expensive)
perf <- performance(pred, measure = "tpr", x.measure = "fpr")
# I know, the following code is bizarre. Just go with it.
auc <- performance(pred, measure = "auc")
auc <- auc@y.values[[1]]
roc.data <- data.frame(fpr=unlist(perf@x.values),
tpr=unlist(perf@y.values),
model="GLM")
ggplot(roc.data, aes(x=fpr, ymin=0, ymax=tpr)) +
geom_ribbon(alpha=0.2) +
geom_line(aes(y=tpr)) +
ggtitle(paste0("ROC Curve w/ AUC=", auc))
我有一个用户工厂。我希望默认情况下确认用户。但是鉴于unconfirmed特征,我不希望它们被确认。虽然我有一个基于实现细节而不是抽象的工作实现,但我想知道如何正确地做到这一点。factory:userdoafter(:create)do|user,evaluator|#unwantedimplementationdetailshereunlessFactoryGirl.factories[:user].defined_traits.map(&:name).include?(:unconfirmed)user.confirm!endendtrait:unconfirmeddoenden
转自:spring.profiles.active和spring.profiles.include的使用及区别说明下文笔者讲述spring.profiles.active和spring.profiles.include的区别简介说明,如下所示我们都知道,在日常开发中,开发|测试|生产环境都拥有不同的配置信息如:jdbc地址、ip、端口等此时为了避免每次都修改全部信息,我们则可以采用以上的属性处理此类异常spring.profiles.active属性例:配置文件,可使用以下方式定义application-${profile}.properties开发环境配置文件:application-dev
我有一个使用SeleniumWebdriver和Nokogiri的Ruby应用程序。我想选择一个类,然后对于那个类对应的每个div,我想根据div的内容执行一个Action。例如,我正在解析以下页面:https://www.google.com/webhp?sourceid=chrome-instant&ion=1&espv=2&ie=UTF-8#q=puppies这是一个搜索结果页面,我正在寻找描述中包含“Adoption”一词的第一个结果。因此机器人应该寻找带有className:"result"的div,对于每个检查它的.descriptiondiv是否包含单词“adoption
我正在我的Rails项目中安装Grape以构建RESTfulAPI。现在一些端点的操作需要身份验证,而另一些则不需要身份验证。例如,我有users端点,看起来像这样:moduleBackendmoduleV1classUsers现在如您所见,除了password/forget之外的所有操作都需要用户登录/验证。创建一个新的端点也没有意义,比如passwords并且只是删除password/forget从逻辑上讲,这个端点应该与用户资源。问题是Grapebefore过滤器没有像except,only这样的选项,我可以在其中说对某些操作应用过滤器。您通常如何干净利落地处理这种情况?
在我做的一些网络开发中,我有多个操作开始,比如对外部API的GET请求,我希望它们同时开始,因为一个不依赖另一个的结果。我希望事情能够在后台运行。我找到了concurrent-rubylibrary这似乎运作良好。通过将其混合到您创建的类中,该类的方法具有在后台线程上运行的异步版本。这导致我编写如下代码,其中FirstAsyncWorker和SecondAsyncWorker是我编写的类,我在其中混合了Concurrent::Async模块,并编写了一个名为“work”的方法来发送HTTP请求:defindexop1_result=FirstAsyncWorker.new.async.
我是Cucumber测试的新手。我创建了两个特征文件:events.featurepartner.feature并将我的步骤定义放在step_definitions文件夹中:./step_definitions/events.rbpartner.rbCucumber似乎在所有.rb文件中查找步骤信息。有没有办法限制该功能查看特定的步骤定义文件?我之所以要这样做,是因为即使我使用了--guess标志,我也会遇到不明确的匹配错误。我之所以要这样做,有以下几个原因。我正在测试CMS,并希望在不同的功能中测试每种不同的内容类型(事件和合作伙伴)。事件.特征Feature:AddpartnerA
a=[3,4,7,8,3]b=[5,3,6,8,3]假设数组长度相同,是否有办法使用each或其他一些惯用方法从两个数组的每个元素中获取结果?不使用计数器?例如获取每个元素的乘积:[15,12,42,64,9](0..a.count-1).eachdo|i|太丑了...ruby1.9.3 最佳答案 使用Array.zip怎么样?:>>a=[3,4,7,8,3]=>[3,4,7,8,3]>>b=[5,3,6,8,3]=>[5,3,6,8,3]>>c=[]=>[]>>a.zip(b)do|i,j|c[[3,5],[4,3],[7,6],
我有一个非常简单的Controller来管理我的Rails应用程序中的静态页面:classPagesController我怎样才能让View模板返回它自己的名字,这样我就可以做这样的事情:#pricing.html.erb#-->"Pricing"感谢您的帮助。 最佳答案 4.3RoutingParametersTheparamshashwillalwayscontainthe:controllerand:actionkeys,butyoushouldusethemethodscontroller_nameandaction_nam
多年来,我在各种网站上遇到过各种问题,用户在字符串和文本字段的开头/结尾放置空格。有时这些会导致格式/布局问题,有时会导致搜索问题(即搜索顺序看起来不对,但实际上并非如此),有时它们实际上会使应用程序崩溃。我认为这会很有用,而不是像我过去所做的那样放入一堆before_save回调,向ActiveRecord添加一些功能以在保存之前自动调用任何字符串/文本字段上的.strip,除非我告诉它不是,例如do_not_strip:field_x,:field_y或类定义顶部的类似内容。在我去弄清楚如何做到这一点之前,有没有人看到更好的解决方案?明确一点,我已经知道我可以做到这一点:befor
完成这个有困难。我正在使用seed.rb+factory_girl来使用rakedb:seed填充数据库。(我知道固定装置存在,但我想以这种方式完成,这只是一个示例,数据库将填充复杂的关联对象。)我的种子.rb:require'factory_girl_rails'["QM","CDC","SI","QS"].eachdo|n|FactoryGirl.create(:grau,nome:n)end还有我的/factories/graus.rbFactoryGirl.definedofactory:graudonomeendend但是当我运行时:rakedb:seed我得到:rakeab