分类 程序猿 下的文章

一个初学者对机器学习的理解

我学习机器学习方面的知识有一周了,由于自己的数学,尤其是统计和概率太差劲,所以理解起里边的公式,就像在看天书一样。
我首先仔细听了12堂公开课,是吴恩达在斯坦福大学讲的,刚开始第一节可以说基本听懂了,但后边的就只能听,完全没办法跟上了。
然后又从网上搜了不少的相关介绍,通俗些的很少,可能是因为这东西很难讲通俗吧。
现在说说自己对机器学习的一些简单理解,理论不一定是正确的,过一段时间我也可能会有新的认识,所以前辈们还是多拍砖指教!
1、机器学习能干什么?
简单的说,就是你去调教一个程序,让程序试着自己去尝试解决问题。比如,预测房价,我们给机器提供一组房价和房屋的参数(面积、户型、朝向、楼层、地理位置等),让机器自己按照一定的公式,去尝试着找到计算方法,不断调整参数,最终找到了某个公式,例如:房价=面积×1000+户型×500+楼层×200……,通过该公式计算,能使得其恰好的符合我们给定数据的结果,就是这样算下来,我们给机器的那些参数算出来,恰好最接近真实的房价。然后,我们就可以得到这个算法(我们并不需要理解究竟是如何计算的),我们将房屋的情况输入给程序,程序就可以预测出房价。
要知道,如果这个操作用人来做,比如面积后面的参数1000,你可能需要从1尝试到10000甚至100000,然后再调整后面若干参数,你的一生也许就只够来写这一个程序了,时间耗费太多。而机器自己去学习解决这个问题,可能很快就能得出答案。而且,随着样本不断增加,机器就会越来越聪明。
当然,除了预测房价,这货还能预测股价,还能用来做人像比对(最强大脑有一期用童年照找现在的人就是百度大脑通过机器学习得到的)。
2、机器学习的分类
对我这个初学者来说,我只能大概的理解,监督学习和非监督学习两类,监督学习,是在有既定答案的情况下的学习,如前面的房价预测。非监督学习,则更复杂,是机器自己来对数据进行分类,可以应用在声音识别和分离上,他可以把两个混合在一起的嘈杂声音,清晰的分成两个独立的声音。你是不是在想,这一定超级复杂吧,因为这件事如果让人做,几乎是很难完成的。但是,在吴恩达的课里,这个操作,只需要一行代码!我了个擦。。。
3、如何学习机器学习?
其实我自己到现在仍然是一头雾水,毕竟有那么一点编程基础,本以为自己看看机器学习的理论,应该能很快入门,但是,当那些公式出现在我面前的时候,我才知道,门槛确实不低啊!
4、机器学习是否值得学习?
我的答案是,当然,即使你付出再大再多的努力,也应该努力的去学,为什么?原因实在太多了:
拉勾上机器学习的岗位,那都是20K起的,而机器学习几乎可以与我们任何一个领域发生关联,我们所从事的任何职业,机器学习都有用武之地。而且机器学习是人工智能的核心,学好了机器学习,我们将来才有可能在人工智能领域拥有一席之地。要知道,在未来,90%以上的职业,都会被人工智能取代,也许人工智能和艺术创作,将成为未来仅存的两大职业。
5、我想举几个行业可以应用的场景,当然有一些现在可能没成为现实,但将来一定会实现:
(1)人脸识别:我们不需要再随身带着身份证了,去ATM取钱,刷脸就行了!
(2)商品定价:根据大量的样本分析,可以自动得出最优的商品定价,按照这个定价,可以获得利润与销量的最优组合,什么薄利多销,那都是浮云。
(3)自动驾驶:想想真是有点小激动呢,因为自动驾驶的数据如果能够实现全球共享,那么自动驾驶系统的程序将会运行完美,车祸将从世界上消失。
(4)农业种植:通过让机器不断观察农作物的状态,调整灌溉、施肥、光照、温度的参数,得到最优组合,让农作物的产量大幅度提升。
(5)情感服务:情感机器人将根据人类的表情、动作、语言数据,理解人类的心理状态,并做出相应的反应。
(6)网络优化:这个可能比较泛泛,具体点,比如你家的路由器,应该放在什么位置,角度如何调整,可能晚上你睡觉时候在卧室,他会如何调整,你做饭时候在厨房,他又该如何调整。
(7)电视节目:学习你的使用习惯,在适当的时候给你提醒,比如你每天都在盯着某个电视剧,结果某一天忘记了,程序会提醒你,是不是要跳过去看看?

这样的例子实在太多,我真心的希望机器学习能应用到越来越多的领域,让我们的生活变得越来越好!

windows server 2012配置SVN流程(2016年11月21日)

因项目需要,需要进行版本控制和团队协作,所以需要在服务器端配置好SVN。
所以自己参考相关文档,手工的一步一步配置,并记录下来。

配置环境

操作系统:Windows server 2012 64位
预装软件:wamp
客户端:Hbuilder(安装SVN插件1.6.x版本)

所需软件

1、tortoiseSVN 1.9.4 (点此用迅雷直接下载
2、TortoiseSVN汉化包LanguagePack_1.9.4-win64-zh_CN.msi (点此用迅雷直接下载
3、下载subversion服务器端Setup-Subversion-1.6.6.msi(点此直接用迅雷下载
由于软件都在国外,所以一般用迅雷加速速度会快一些。

安装软件

1、安装tortoiseSVN,没什么好配置的,直接下一步即可。
2345截图20161121204849.png
2、安装汉化包。
3、安装subversion,没什么好配置的,如果你想安装在其他路径可以改一下路径。
2.png
4,安装完成后,服务器桌面点右键,看到SVN的菜单了。
3.png

建立版本库

运行subversion服务器端需要建立一个版本库(Repository),用来存放项目代码。
建立方法有两个:
1、命令行创建(略)
2、用tortoiseSVN工具创建
2.1 在你的项目目录(如:D:\)下,建立一个文件夹,叫做repository。
4.png
2.2 进入repository目录下,单击右键,选择tortoriseSVN,选择create repository here,会生成一堆文件和目录。
5.png
2.3 这时候会弹出提示:
9.png
记录下这个网址,然后点击确定
2.4 配置用户权限
2.4.1 打开当前目录下conf/svnserve.confi配置文件。
依次找到以下三行:

anon-access = read

auth-access = write

password-db = passwd

去掉前面所有的#,然后将第一行的read改为none,即:
anon-access = none
auth-access = write
password-db = passwd
2.4.2 打开当前目录下的passwd文件
在末行添加:username = password,请将这里的username替换为你的用户名,password替换为你的密码
2.4.3 配置中文
在任意位置点击右键,选择tortoiseSVN->setting
打开的配置界面中,language选择中文,确定。
至此,配置完毕。
注意:请重启服务器。

启动服务器端

管理员模式启动命令行cmd
输入svnserve -d -r d:\repository 回车 (注意替换路径)
dos窗口不要关。不会显示其他内容的。
7.png

生成第一个版本库服务器

我们在wamp的www目录下创建一个项目,叫做test
在test中,建立一个文件,index.php,内容:version 1.0
请确保您可以在客户端通过URL: http://服务器IP/项目名称/index.php访问到该页面
定位到test目录下,空白处,点右键,选择tortoiseSVN->导入
版本库URL填写刚才记录下的URL
10.png
点击确定。
11.png
至此,我们的第一个版本库就生成了。

客户端操作

完成了服务端配置和测试,还需要实现SVN最重要的功能

从客户端获取文件

我是用HBuilder安装了svn插件1.6.x,如何安装请百度,非常简单。
1、打开HBuilder,在左侧项目管理器区域空白处单击右键,选择导入。
2、选择SVN->从SVN检出项目。
12.png
3、创建新的资源库位置->下一步
4、在URL填写svn服务器端网址,如:svn://222.222.212.212

建议

不要直接在运行中的服务器上安装,最好先找一个空的服务器进行测试,熟悉了再在项目上部署。

鸣谢:
xinxin19881112 SVN服务器搭建--Subversio与TortoiseSVN的配置安装

双击提交按钮导致数据重复提交的解决方法

1426932345.jpg
某WEB项目在交测试团队测试时,发现如下问题:

当连续快速点击提交按钮时,会提交多次重复的记录。

经过分析,我们首先想到了服务端判断是否重复记录的方法:

当提交记录时,判断某session值是否已被设置。
如果未被设置,则设置该session值,并继续执行。
如果已被设置,则终止执行。

但在实际测试中,由于表单提交到服务器端所需的时间通常由网速觉得,一旦该时间>用户双击间隔,则会导致session未设置生效,第二条数据已经提交过来了。
失败!

后来想到,必须在客户端进行判断,最快的方法是js

js端方法(可用):

js中定义一个全局变量m
当点击提交按钮时,执行check_submit函数
该函数第一行即给m++
接下来判断m的值,如果m>1,则表示是重复提交,可弹出提示,防止用户重复点击
如果m<=1,表示是首次提交,则正常执行提交流程。

关键代码如下:

var m = 0;
function check_submit(){
    m++;
    if(m > 1){
        alert('请勿重复提交!');
        return false;
    }else{
        return true;
    }
}

js常用代码

QQ20150227-15.png

目录

表单验证

表单验证

正则方法验证银行卡号是否符合规则

function check_num(){
    var obj =  document.getElementbyId('cardnum');
    var reg = /^\d{15,19}$/;
    if(reg.test(obj.value)){
        alert('是银行卡号!');
        return true;
    }else{
        alert('不是银行卡号!');
        return false;
    }
}

正则方法验证金额是否符合规则(大于0的正数)

function check_num(){
    var obj =  document.getElementbyId('cardnum');
    var reg = /^\d+(?=\.{0,1}\d+$|$)/;
    if(reg.test(obj.value)){
        alert('非0是正数!');
        return true;
    }else{
        alert('不是非0正数!');
        return false;
    }
}