先验算法(Apriori Algorithm)是关联规则学习的经典算法之一。先验算法的设计目的是为了处理包含交易信息内容的数据库(例如,顾客购买的商品清单,或者网页常访清单。)而其他的算法则是设计用来寻找无交易信息(如Winepi算法和Minepi算法)或无时间标记(如DNA测序)的数据之间的联系规则。关联分析的目的是从大规模数据集中寻找有趣关系的任务。这些关系可以有两种形式:频繁项集或者关联规则。频繁项集(frequent item sets)是指经常出现在一起的物品的集合,关联关系(association rules)暗示两种物品之间可能存在很强的关系。
先验算法采用广度优先搜索算法进行搜索并采用树结构来对候选项目集进行高效计数。它通过长度为 k-1的候选项目集来产生长度为k的候选项目集,然后从中删除包含不常见子模式的候选项。根据向下封闭性引理,该候选项目集包含所有长度为 k的频繁项目集。之后,就可以通过扫描交易数据库来决定候选项目集中的频繁项目集。
from __future__ import division, print_function import numpy as np import itertools class Rule(): def __init__(self, antecedent, concequent, confidence, support): self.antecedent = antecedent self.concequent = concequent self.confidence = confidence self.support = support class Apriori(): """A method for determining frequent itemsets in a transactional database and also for generating rules for those itemsets. Parameters: ----------- min_sup: float The minimum fraction of transactions an itemets needs to occur in to be deemed frequent min_conf: float: The minimum fraction of times the antecedent needs to imply the concequent to justify rule "
VXLAN的实现模型如下图: 在这个实现模型中,VTEP(VXLAN Tunnel End Point)是位于计算节点的br-tun上,但是在实际应用中,VTEP也有位于TOR交换机的情形。 VTEP位于TOR上,而不是Host内的br-tun。我们把这一段组网抽象成下图: 从用户视角,这是一个VXLAN网络,所以Neutron对外暴露的接口(模型)仍然是Network。但是在具体实现时,VTEP位于TOR上,而且,TOR还需要做VNI(VXLAN ID)到VLAN ID的映射(VLAN1、VLAN2、VLAN3、VLAN4)。这个映射并不能随意映射,因为TOR交换机上的VLAN ID,也不能任意取值,需要经过规划。所以Neutron就有了如下模型: segment实际上是一个列表,这个列表的元素是[provider:physical_network,provider:network_type,provider:segmentation_id],Neutron正是通过这三个字段描述了需要描述的信息(比如VLAN ID,即provider:segmentation_id)。 说到这里,你可能会问,那个VXLAN网络的VNI,在哪里输入?这个VNI的赋值,由Neutron内部自动生成,而它生成的方法是根据配置文件的规则。 通过上述的这个场景(VTEP位于TOR上),我们可以总结出Network模型中的segments字段的用途: 1 使用场景:主要是VTEP位于TOR上。 2 用户体验:用户感觉到的只是一个普通租户,感觉不到实现细节。 3 字段用途:由于VTEP位于TOR上,Neutron内部还需要做一个网络ID的二次转换。TOR的VLAN ID是一个提前规划好的值,不能任意取值。此时,segments字段就承担这个作用,它的取值表达的就是这些提前规划好的值。 在这里,Network模型本身的网络ID相对于外部网络ID,segment字段里的网络ID相当于内部网络ID。Network本身的网络类型是VXLAN,segments字段里的网络类型是VLAN。
apk下载:点击打开链接
军棋分三种下法:
一种是暗棋(棋子立起),两人对决,需要裁判;
一种是明棋,字朝上摆,不需要裁判;
一种是翻棋,开始字朝下摆,不需要裁判。
使用OV7725摄像头采集图像进行商品识别,uvc调试过程中发现图像中间亮四周暗;
网上找原因,说是lens 的CRA 和 sensor的CRA不匹配;可以通过矫正透镜改进;
查看手册,lens correction部分;果然有这部分介绍
12 Deal with Lens—处理Lens
12.1 Light fall off—-光线脱落
光线掉落意味着图像的角落比图像的中心更暗。它是由镜头引起的。
OV7725的镜头阴影校正功能可以打开以补偿角亮度并使整个画面看起来一样明亮。
12.2 Dark corner—黑暗的角落
某些镜头可能有黑暗的角落。黑角表示图片的颜色几乎为黑色。使用镜头校正无法纠正黑暗角落。所以暗角的模块是NG,不能使用。
12.3 Resolution—方法
相机模块的分辨率取决于镜头设计,对焦调整和传感器分辨率。相机模块组装对焦调整非常重要。
对于OV7725,焦距约为50〜60cm。景深大约从25〜30厘米到无限大。如果检查相机模块的分辨率,分辨率图表应放置在50〜60厘米处。
12.4 Optical contrast—光学对比度
镜头的光学对比度对于画质非常重要。如果镜头的光学对比度不好,照片会看起来很诡异。尽管可以通过增加传感器对比度来提高图像清晰度,但较高的传感器对比度会使图像暗区的细节丢失。
12.5 Lens Cover—镜头盖
镜头盖是光路中最便宜的部件。 但它可能会非常影响画面质量。
镜头盖应由双面带AR涂层的光学玻璃制成。 否则,镜头盖可能会导致灵敏度损失和/或更强烈的镜头光晕。
12.6 Lens Correction—镜头校正
应该在每个模块中调整镜头校正设置。 请联系OmniVision本地FAE镜头校正调整。
我的问题应该是光脱落导致的,打开透镜的阴影矫正功能;
设置寄存器
// Lens Correction, should be tuned with real camera module
set_REGISTER(LC_RADI, 0x10); //(0x4a, 0x10);
set_REGISTER(LC_COEF, 0x10); //(0x49, 0x10);
// set_REGISTER(LC_XC, 0x08); //(0x47, 0x08);
set_REGISTER(LC_COEFB, 0x14); //(0x4b, 0x14);
以下代码演示策略迭代强化算法
前提:
python语言 OpenAI gym库 主要演示AI自动寻路的算法。如图:
图中格子从做到右,从上到下依次编号,1~8.暗黄色的圆球,初始随机出现在1~5位置,在格子上移动。移动到黑色点失败,移动到黄色点胜利。
首先,写一个gym环境:grid_map.py,代码如下
import logging import numpy import random from gym import spaces import gym logger = logging.getLogger(__name__) class GridEnv(gym.Env): metadata = { 'render.modes': ['human', 'rgb_array'], 'video.frames_per_second': 2 } def __init__(self): self.states = [1,2,3,4,5,6,7,8] #状态空间 self.x = [140,220,300,380,460,140,300,460] self.y = [250,250,250,250,250,150,150,150] self.terminate_states = dict() #终止状态为字典格式 self.terminate_states[6] = 1 self.terminate_states[7] = 1 self.terminate_states[8] = 1 self.actions = ['n','e','s','w'] self.rewards = dict() #回报的数据结构为字典 self.rewards['1_s'] = -1.0 self.
最近用Chrome版本 66.0.3359.139(正式版本) (64 位)浏览某些网页的时候会出现黑色方块,随机出现,一直闪动,看着十分不爽。
于是乎查了相关论坛得到了解决方法。
原因:由于Chrome浏览器自身bug。
解决办法:Chrome 的设置—->高级—->使用硬件加速模式(如果可用)—–>关闭此功能—–>重新启动Chrome
这样就ok了,拿走不谢!
1.简述
累积式爬虫:累积并去重
增量式爬虫:增量式更新
deep web:需要登录 请求头:
host 主机和端口
Connection 链接类型
Upgrade-Insecure-Requests 升级为https
User-Agent 身份
Accept 接收的文件类型
Referer 来源,用于防爬和防盗链(防止盗用链接,只允许按要求站内跳转)
Accept-Encoding 支持编码类型 cookie
”’
”’
2.爬虫基本包requests
注意是响应对象 参数位置有严格要求
response = requests.get(url网址,params路径中?参数用字典格式,headers伪装身份)
response.status_code 状态码
response.headers 响应头
response.request 响应对应的请求
response.text str类型 响应
response.content bytes类型响应 (常用)
params说明: 可以在路径中?后边带参数
或者构造dict放到params参数位置
data = input(‘需要搜索的关键字’)
params = { ‘kw’ : data }
”’
”’
3.request.post(url,data=data,headers=headers)
data = data 请求体 字典数据
代理IP
proxies = { } 字典格式
request.get(url,proxies=proxies)
本人因学习需要在某宝上挑选了windows平板电脑许久,因为安卓平板的性能以及生产力性能不够或是不方便,加上苹果的昂贵的价格逼迫下,看中了一款较为实用,性能还可以的平板,台电X3plus ,这基本就是国产廉价版的surface的样子,不过性能上还是不错的。
网传台电X3plus可以添加固态硬盘,这无疑极大地增加了一定的性价比,但是这就是要注意一点,17年下半年或者是18年的版本都不能拓展固态硬盘!!!!!
网传的拆机图片:
然而实际的新版本的拆机是:
这也是够坑的了,官方给的解释是:
设计之初是有考虑带SSD升级开口的模具版本,但是受微软要求,X3 Plus最终定样时,模具不带扩展盖,但是前期PCB生产早已完成,因此前期产品才会带有接口。X3 Plus官方并没有宣传或推荐用户拆机加装SSD,因为拆机后会直接失去官方保修服务,因此官方对此是明确不予支持的。
总的来说就是不让升级ssd的意思,不过还没有尝试自己焊接m2接口的朋友,也不敢轻易尝试,怕是2000rmb凉凉。
特地写下这篇博客望之后购买的朋友能够注意到这个问题,哎,看来之前查询的时候还是不够细致,也是一个教训。
3D Deep Leaky Noisy-or Network 论文阅读 原文:Evaluate the Malignancy of Pulmonary Nodules Using the 3D Deep Leaky Noisy-or Network
博文参考:Doublle Tree的博客中Evaluate the Malignancy of Pulmonary Nodules Using the 3D Deep Leaky Noisy-or Network 论文阅读一文。
注:本文为2017年Kaggle举办的数据科学竞赛中,第一名获奖团队的相关论文,若需查看代码可访问Github。
简介 根据CT图像的肺癌自动诊断系统包含以下步骤:
检测所有可疑病变; 评估整个肺部的恶性程度。 但目前大多数的研究主要集中于第一步,以及通过肺结节诊断肺癌存在较高的假阳性率。因此,肺癌的诊断需要对每个可疑结节进行细致分析,再联合所有结节信息进行定性诊断。针对上述问题,本文提出了一个三维深度神经网络(3D deep neural network)用于解决这些问题。该网络由两部分组成:
用于结节检测的3D region proposal network; 基于置信检测(the detection confidence)选出top-5结节并评估其癌症可能性,最后将此概率与Leaky noisy-or模型相结合评估患者患癌的可能性。 其中,上述两个模型均采用修改后的U-net模型,并使用数据增强操作避免过拟合问题。
数据集和预处理 数据集 训练集由LUNA16数据集(the Lung Nodule Analysis 2016)和NDSB3(Data Science Bowl 2017)数据集两部分组成。其中,LUNA16数据集含有888个病例,标记了1186个肺结节;在NDSB3数据集中,1397个病例用于训练,198个病例用于验证,506个病例用于测试,且人工标注了训练集中754个结节和验证集中78个结节。
对于LUNA16数据集,其存在许多较小的注释结节,且临床经验认为直径6mm以下的肺结节无危险。但在NDSB3数据集中,存在较多的大直径结节且结节多与主支气管相连。因此,针对两个数据集的差异,需去除LUNA16数据集中直径6mm的结节,同时对NDSB3数据集进行人工标注。
此处说明了Julian de Wit的解决方案中,直接设置结节直径为6mm的原因,以及为何需对NDSB3数据集进行人工标注。
上图为结节分布情况图。其中,图a为DSB(NDSB3)与LUNA(LUNA16)数据集中结节直径分布情况;图b为DSB数据集中患癌患者与健康人群的最大结节直径分布情况。
预处理 首先将所有的原始数据转变为HU值,如下图a所示,再进行如下步骤:
带有建筑元素的游戏往往都允许玩家在一定限制里自由地摆放建筑,建筑的摆放受到地形、其他建筑的阻挡限制或者以格子为单位,必须整齐摆放。
我想实现一个网格化的地图,建筑摆放限制必须在网格点初放下,在此使用了LineRenderer的方法画线,但有前辈说这样画线占用太多资源,又没有说实际中如何做。
于是我考虑仍使用线渲染器,但在后期把显示全地图的网格改为只在建筑附近显示,目前的思路是得到每个点的坐标,再以格子为单位的得到四个点坐标储存进数组,这样就得到了格子数组,画格子需要5个点,第5个点是起始点,不需要在数组里储存,画线时positionCount为5再加个起始点就行了。
目前进度:画线、储存格子
public class CutUpMap : MonoBehaviour { public float sizeX;//地图尺寸x public float sizeZ;//地图尺寸z public GameObject terrain;//获取地图 public int rowNum;//线行数 public int columnNum;//线列数 public GameObject[,] lineArray;//线对象数组 public LineRenderer lineRenderer;//线渲染器 private Vector3[,] pointPos;//线上点坐标数组 private Vector3[,] rectPos;//线画为格子,以格子为单位储存格子上四点坐标 private int retPosIndex=0;//格子索引 void Start() { MapGrid();//计算尺寸和线行数、线列数 this.lineArray = new GameObject[rowNum - 1, columnNum - 1];//初始化线对象数组 Debug.Log("lineArray得到的row为:"+ (rowNum - 1 )+ ", column为:"+(columnNum-1)); pointPos = new Vector3[rowNum,columnNum];//初始化线上点坐标数组 for(int i = 0; i < rowNum; i++) { for(int j = 0; j < columnNum; j++) { pointPos[i, j] = new Vector3(j * 10, 0.