有时候我们进行贝叶斯分类时,由于数据量太大导致内存溢出或者对模型的训练有着特殊要求(比如用第一个月的数据预测第二个月,再将第二个月的数据加入已经训练好的模型,去预测第三个月…),这时普通的贝叶斯分类不行了。我们需要使用贝叶斯来进行增量学习(incremental learning), weka的贝叶斯分类器即存在增量式的贝叶斯分类器。下文以多项式朴素贝叶斯增量学习为例,weka中的包为:

weka.classifiers.bayes.NaiveBayesMultinomialUpdateable

下文是核心代码:

        //获取第一个月的数据用于建立模型
        ArffLoader loader = new ArffLoader();
        loader.setFile(new File("month1.arff"));
        loader.getStructure();//这句话必须有,不然会报错

        //定义分类器 并用第一个月的数据做训练
        Instances originDataSet = loader.getDataSet();//获取第一个月的实例
        originDataSet.setClassIndex(originDataSet.numAttributes()-1);//定义最后一个属性作为分类目标
        NaiveBayesMultinomialUpdateable nb = new NaiveBayesMultinomialUpdateable();//定义模型
        nb.buildClassifier(originDataSet);//建立模型

        //对从第二个月起的每个月进行预测和训练,一直到第100个月,(2,100只是用于示例)
        for (int month = 2; month <= 100; month++) {
            //读取测试集
            ArffLoader testLoader = new ArffLoader();
            testLoader.setFile(new File("month"+i+".arff"));
            testLoader.getStructure();

            Instances testDataSet = testLoader.getDataSet();//获取测试集实例
            //进行分类,并且输出
            for (int i = 0; i< testDataSet.numInstances(); i++) {
                FileWriter fileWritter = new FileWriter("output.txt", true);
                BufferedWriter bufferWritter = new BufferedWriter(fileWritter);
                bufferWritter.write(nb.distributionForInstance(testDataSet.instance(i))[1]+'\n');//这一行输出的是分类中分到第二类(下标为1)的概率
                bufferWritter.flush();
            }

            // 再把这次的测试集当做训练集进行训练
            for (int i = 0; i< testDataSet.size(); i++) {
                testDataSet.setClassIndex(testDataSet.numAttributes()-1);
                nb.updateClassifier(testDataSet.get(i));
            }

一款产品发布,其初始用户量很小,这时就需要伪造一批用户来增加平台的用户量,搭起初步的用户生态系统。那么伪造用户时,我们必然需要网名以及头像(也有可能需要签名)等等信息。所以前些日子写了个小爬虫来爬取一批(30000+)网名及头像。

对于头像的爬取,我选择的站点是“我要个性网”(http://www.woyaogexing.com),它的图片都没有做防盗链,因此我只需要爬它图片的url就行。对于昵称,我选择的网站是“QQ网名”(http://www.oicq88.com)。选择好爬取目标,就需要咱的爬虫登场了。以前爬虫经常用scrapy,但对于我这次的量显然是杀鸡用牛刀。这个爬虫是利用py[……]

Read more

今天打算好好测一下我们的哒哒相机APP (友情广告一波,下载链接)的后台性能。目前哒哒相机APP只用了一台阿里云ECS(1核CPU、2G内存~~). 为了开发测试, 又买了一台用作测试服务器(1核CPU、1G内存). 后台环境为ubuntu14.04、nginx 1.4、mysql 5.6 以及php5.6.

用ab分别在正式服务器和测试服务器对同一个php文件进行读取,发现在同等压力下测试服务器的速度就是要比正式服务器高。这可就郁闷死我了,你说一样的配置,正式服务器还比测试服务器多了一倍内存,为毛并发还比不上测试服务器?这一整天就耗在这个问题上了。

刚开始我以为是PHP配置的问题[……]

Read more

前些日子,AWS EC2做活动,注册即可免费试用一年,这等好事怎能错过,遂赶紧领了一台,可以上一些和谐的网站,顺便当做我个人的博客。因此这算是我正式写的第一篇博客吧。(Mark)

——————————————-分割线————————————————-

大概在三个月前过年回家的时候,偶然看到了前阿里大牛李智慧的《大型网站技术架构-核心原理与案例分析》,作为一个技术noob,内心除了翻滚的敬仰之情,更多的带给我的是向往,淘宝这种日均亿级别PV的网站是如何实现的。[……]

Read more