noHup - machine learning
type: channel
link: http://chris.nohup.cc/tag/machine-learning/
items: TensorFlow 2.0使用CNN进行图片分类
items: 机器学习项目服务器上线部署全流程记录
items: R中randomForest包与ggplot2的一个不兼容问题
items: 蛋白质序列处理—总体步骤
items: 蛋白质序列特征向量计算—数据处理第(4)步
items: The First Step To Use Weka
items: Mac上安装Python机器学习库scikit-learn

TensorFlow 2.0使用CNN进行图片分类
type: item
date: 2020-04-01T10:39:00+00:00
description: Overview1.加载数据2.处理数据3.构建模型4.编译并训练模型 Overview 本篇我们来记录一下怎么使用TensorFlow2.0当中的Keras模块来进行CNN图片分类。 1.加载数据 我们用经典的猫狗分类数据集来做这次图片分类。 import os import numpy as np import matplotlib.pyplot as plt import tensorflow as tf from tensorflow.keras.models import Sequential from tensorflow.keras.layers import Dense, Conv2D, Flatten, Dropout, MaxPooling2D from tensorflow.keras.preprocessing.image import ImageDataGenerator # 下载数据 _URL = 'https://storage.googleapis.com/mledu-datasets/cats_and_dogs_filtered.zip' path_to_zip = tf.keras.utils.get_file('cats_and_dogs.zip', origin=_URL, extract=True) PATH = os.path.join(os.path.dirname(path_to_zip), 'cats_and_dogs_filtered') 统计下载到本地的数据： train_dir = os.path.join(PATH, 'train') validation_dir = os.path.join(PATH, 'validation') train_cats_dir = os.path.join(train_dir, 'cats') # 训练集猫图 train_dogs_dir = os.path.join(train_dir, 'dogs') # 训练集狗图 validation_cats_dir = os.path.join(validation_dir, 'cats') # 验证集猫图 validation_dogs_dir = os.path.join(validation_dir, 'dogs') # 验证集狗图 num_cats_train = len(os.listdir(train_cats_dir)) num_dogs_train = len(os.listdir(train_dogs_dir)) num_cats_val = len(os.listdir(validation_cats_dir)) num_dogs_val = len(os.listdir(validation_dogs_dir)) total_train = num_cats_train + num_dogs_train total_val = num_cats_val + num_dogs_val 2.处理数据 如果直接拿训练集去训练，会遇到过拟合问题，所以我们需要对训练集进行数据增强。图片的数据增强是很简单的，有水平或垂直翻转，旋转，缩放等等方式。 batch_size = 128 epochs = 15 IMG_HEIGHT = 150 IMG_WIDTH = 150 train_image_generator = ImageDataGenerator( rescale=1./255, rotation_range=45, width_shift_range=.15, height_shift_range=.15, horizontal_flip=True, zoom_range=0.5 ) # train_image_generator = ImageDataGenerator(rescale=1./255) validation_image_generator = ImageDataGenerator(rescale=1./255) 读取图片： train_data_gen = train_image_generator.flow_from_directory(batch_size=batch_size, directory=train_dir, shuffle=True, target_size=(IMG_HEIGHT, IMG_WIDTH), class_mode='binary') val_data_gen = validation_image_generator.flow_from_directory(batch_size=batch_size, directory=…

机器学习项目服务器上线部署全流程记录
type: item
date: 2018-03-02T06:36:00+00:00
description: Overview1.Java端1.1 安装JDK1.81.2 安装Tomcat71.2.1 配置Tomcat7启动内存1.3 检查安装php和Apache21.4 设置Apache2反向代理1.5 安装MySQL5.71.6 安装配置phpmyadmin2.Perl后台2.1 设置Apache2 CGI2.2 Perl相关模块安装2.3 gearman消息队列安装3. Python相关安装4. R语言及相关包安装 Overview 我们团队完整的机器学习项目已经做了两个了，分别是Bastion4和Bastion6。之前两个项目上线部署的记录过于片段化，针对现在马上要做完的Bastion3项目，我们在此完整记录搭建服务器各种环境的全部流程，以备不时之需。 完整的项目基本分为三大部分：Java处理业务逻辑；Perl后台消息队列；R机器学习模型预测。每个大部分还有很多细节，我们会在每部分都详细记录。 新申请的云服务器预装的仍然是Ubuntu16.04LTS发行版的Linux系统。 1.Java端 Java端负责将用户提交的任务信息提交至后台Perl服务器并记录在MySQL数据库中。因此这部分会安装JDK1.8，Tomcat7和MySQL5.7。 1.1 安装JDK1.8 安装JDK1.8，用apt命令很方便，不用单独下载解压。命令如下： sudo apt-get install software-properties-common -y sudo add-apt-repository ppa:webupd8team/java -y sudo apt-get update sudo apt-get install oracle-java8-installer oracle-java8-set-default -y 安装完成之后，JDK1.8会被安装在/usr/lib/jvm/java-8-oracle中，在/etc/profile或者~/.bashrc中配置JAVA_HOME变量 (我用的是~/.bashrc文件)： export JAVA_HOME=/usr/lib/jvm/java-8-oracle 安装好之后，需要以下命令使配置生效： source ~/.bashrc 1.2 安装Tomcat7 使用以下的命令安装Tomcat7: sudo apt-get install tomcat7 安装过程中，可能会报如下的错误(即使你已经配置好了JAVA_HOME): Jul 09 16:52:16 bastiondb systemd[1]: Starting LSB: Start Tomcat.... Jul 09 16:52:16 bastiondb tomcat7[6413]: * no JDK or JRE found - please...E Jul 09 16:52:16 bastiondb systemd[1]: tomcat7.service: Control process e...1 Jul 09 16:52:16 bastiondb systemd[1]: Failed to start LSB: Start Tomcat.. Jul 09 16:52:16 bastiondb systemd[1]: tomcat7.service: Unit entered fail.... Jul 09 16:52:16 bastiondb systemd[1]: tomcat7.service: Failed with resul.... Hint: Some lines were ellipsized, use -l to show in full. dpkg: error processing package tomcat7 (--configure): subprocess installed post-installation script returned error exit status 1 Errors were encountered while processing: tomcat7 E: Sub-process /usr/bin/dpkg returned an error code (1) 出现这个错误，说明tomcat7已经装好了，但是由于tomcat在启动时找不到JAVA_HOME的路径，所以报错。查看/etc/default/tomcat7，会发现下面这行： #JAVA_HOME=/usr/lib/jvm/openjdk-6-jdk 去掉注释，并改为我们自己的JAVA_HOME路径： JAVA_HOME=/usr/lib/jvm/java-8-oracle 重新运行安装命令： sudo apt-…

R中randomForest包与ggplot2的一个不兼容问题
type: item
date: 2016-01-28T02:58:00+00:00
description: Overview1. 错误描述2. 解决方法 Overview 在做实验的时候因为要用到随机森林，所以使用了R中的randomForest包，但在画图的时候报了一个非常诡异的错误。 1. 错误描述 下面是我引入randomForest包之后的代码，这里省略了一些细节，只保留跟错误有关的代码: ## randomforest library("randomForest") # randomforest调参 bestmtryMatrix <- tuneRF(train.bal[,-1],train.bal[,1], ntreeTry=100, stepFactor=1.5,improve=0.01, trace=TRUE,plot=FALSE, dobest=FALSE) bestmtryMatrix # 找到最佳参数 bestmtry <- bestmtryMatrix[which.min(bestmtryMatrix[,2]),1] # 训练模型 rfNormal <-randomForest(Class~.,data=train.bal, mtry=bestmtry, ntree=1000, keep.forest=TRUE, importance=TRUE) # 预测 rfNormal.predictions <- predict(rfNormal,type="prob",newdata=test) 在画图时的代码： g <- ggplot(data=rocdata,aes(x=ejeX,y=ejeY))+geom_line(aes(colour=Metodo),size=0.8)+scale_colour_manual(values=c("red","blue","green4"))+xlab("False positive rate")+ ylab("True positive rate")+theme_custom()+theme(legend.position=c(0.73,0.1))+ #设定x，y轴坐标刻度 scale_x_continuous(limits=c(0, 1),breaks=seq(0,1,0.2))+ scale_y_continuous(limits=c(0, 1),breaks=seq(0,1,0.2)) # 添加一条对角线 g <- g+geom_abline(intercept=0,slope=1) 上面代码中，theme_custom()就是我自定义的样式函数，可以在 使用R语言ggplot2包画图时的一个不兼容问题 中查看这个函数的详细信息。 在运行时报了下面的错误： 错误于UseMethod("margin") : "margin"没有适用于"unit"目标对象的方法 Calls: theme_custom ... inherits -> theme -> element_text -> structure -> margin 停止执行 又是element_text中margin的问题，可见更新之后这里有点不稳定，我们在 使用R语言ggplot2包画图时的一个不兼容问题 讨论的问题也与margin相关。 2. 解决方法 刚开始我以为是这个函数名在randomForest中有同名函数导致冲突，所以修改了theme_custom()，改为theme_custom_chris()，结果依然报错。但是我试着删除了randomForest的相关代码（library("randomForest")这句也一定要删掉），则不再报错。 实际上，正是library("randomForest")引入randomForest包导致的问题，那在使用完randomForest之后，手动将它从当前的程序中去掉是不是就可以了呢？ 在R中使用完randomForest包的代码之后，ggplot画图代码之前，添加下面的代码： detach("package:randomForest", unload=TRUE) 意义也非常直观明了，在运行过程中detach randomForest包，然后重新运行程序，一切正常。

蛋白质序列处理—总体步骤
type: item
date: 2015-09-22T14:45:00+00:00
description: 蛋白质序列处理程序之前得到的数据源太乱，这些天整理并重新摆放了一下，每一步的输入文件夹后缀都有一个-in，处理程序文件夹后缀为-run，输出文件夹后缀为-out，这样条理清晰了很多，今日记录，以方便日后查阅使用。 数据处理部分共分5步： 下载并分类(set class) 多步CD-hit 正负样本1:1平衡(Dataset balance) 特征计算(feature calculation) 特征选择(feature selection) 下面分别详细地记录每步的具体作用及用法。 1)下载并分类(set class) 通过DownldProtSeq.java从Effectorsequencesdata.txt中读取所需的蛋白质序列信息，从http://www.uniprot.org/uniprot/上面下载对应的蛋白质序列数据。 下载完成后保存在fastafiles文件夹中，与之前的BPBAacBi_pro文件夹和sieve文件夹中的.fasta文件一起，组成set class这一步骤的输入数据。 set class的作用是将蛋白质序列分类为positive和negative数据，positive数据加上1标记，negative数据加上-1标记。 set class这一步用到的是setcls_integ.sh文件调用fasta_setclass.py以及eft3_setclass.py两个Python脚本。 输出了T3fastaPool_clfed.fasta，T4posiNeg.fasta，T6posneg.fasta三个文件，并且这三个文件将会在第二步中作为输入文件。 2)多步CD-hit CD-hit这一步需要用到CD-hit软件包，详细信息见http://weizhongli-lab.org/cd-hit/。原本地文件中经过编译之后的cd-hit二进制文件在Linux上无法运行，故在删除了包内的.o文件以及所有的二进制文件后，在命令行中运行make openmp=yes将其重新编译，得到的cd-hit文件就可以使用了，使用方法如下: ./cd-hit -i <fasta-file> -o T6pn06snd.out -c 0.6 -n 4 这样会得到很多.out文件，这些文件将是第三步的输入文件。 3)正负样本1:1平衡(Dataset balance) 该步骤处理程序只有一个undersmple_neg.py脚本文件，目的是控制正负样本(positive和negative样本)的比例为1:1。平衡后的样本有三个：T3undrsmp.txt，T4undrsmp.txt，T6undrsmp.txt。 4)特征计算(feature calculation) 第四步比较复杂，又可分为7小步。前6小步中，计算出6个特征向量文件(file of feature vectors)，第7步将这些特征向量聚合在一起，形成一系列的.CSV文件，然后将这些.CSV文件按照T3，T4，T6分别放置。详见蛋白质序列特征向量计算—数据处理第(4)步。 5)特征选择(feature selection) 特征选择这一步，分别用了两种算法。这两种算法互不干涉，无先后顺序。 mRMR算法，详见http://penglab.janelia.org/proj/mRMR/。 用法如下： python fts_select.py <T3_cdhit_N30_50fts.txt> <csv-before-selection> <csv-after-selection> <50/100/200> 其中，<csv-before-selection>是第四步中得到的.CSV文件，<csv-after-selection>是本步得到的结果文件，<50/100/200>表示截取前<50/100/200>个特征，<T3_cdhit_N30_50fts.txt>是经过mrmr文件处理过后得到的一系列文件，全部在文件夹中。 InfoGain算法，用法如下： python weka_fts_slct.py <InfoGainFslct> <50/100/200> <csv-before-selection> <csv-after-selection> 其中<csv-before-selection>是第四步中得到的.CSV文件，<csv-after-selection>是本步得到的结果文件，<50/100/200>表示截取前<50/100/200>个特征，<InfoGainFslct>这一系列文件在文件夹中。

蛋白质序列特征向量计算—数据处理第(4)步
type: item
date: 2015-09-22T14:35:00+00:00
description: 该步骤为数据处理的第(4)步，共包含6小步。 其中前三步： 1. AAC,Amino acid composition(AminoAcidC.py) 2. SEQ,Sequence(Seq.py) 3. eft3,amino acids combination properties(involving kmp algorithm)(Eft3.py) 这前三步用到feature_calc.sh和AminoAcidC.py, Seq.py, Eft3.py, kmp.py, eft3_fts.py共六个脚本文件， feature_calc.sh是前三步的程序入口，会自动调用五个py脚本。 这前三步，需要在针对T3undrsmp.txt,T4undrsmp.txt,T6undrsmp.txt运行脚本文件时，分别将参数N_term_rsds=25,30,50带入，这样会得到27个和T3aac_N25.txt类似格式的文件。将其分门别类放入9个文件夹，以供后三步使用。 后三步： 4. AAINDEX(support code/chenzheng) ./encode -i <chen’s file format> -o ../t3_1.aaindex -t aaindex 5. CKSAAP(support code/chenzheng) ./encode -i <chen’s file format> -o ../t3_1.cksaap -t cksaap (Chen’s aaindex cksaap output have a comma at end of each line) 6. PSSM python t34pssm.py T4undrsmp.txt ./t4 ./t4pssm 第4步和第5步中所需的<chen’s file format>,是T3undrsmp.txt,T4undrsmp.txt,T6undrsmp.txt三个文件经过fasta_chenfmt_std.py脚本文件处理之后得出的T3toChen.txt,T4toChen.txt,T6toChen.txt，这三个文件存放在文件夹Chen'sFormatFile中。 第4步和第5步中所需的encode文件需要将原文件夹中的二进制文件和.o文件删除，然后重新编译运行。具体编译方法，详见encode文件夹中的说明性文件Makefile。 这三步得出来的三个文件，分别对应T3,T4,T6放入前三步的九个文件夹中。这样，每个文件夹中均含有6个文件。 然后，Each of the step output a file of feature vectors AND assemble the CSV file，每6个特征向量文件聚合成一个CSV文件，这个文件包含了六种特征。这一步得出的9个CSV特征文件,在结果文件夹中。

The First Step To Use Weka
type: item
date: 2015-08-13T02:57:00+00:00
description: Overview Weka is easy to use when we do feature selection and classification. Using Weka's friendly graphic user interface, we can try and validate multiple feature selection methods and classifiers that have already been implemented into Weka. This article tries to give a quick start guide about this wonderful tool. 1. Download Weka 1.1 About different versions You can download Weka with different versions from Weka's Download page. There are Stable book 3rd ed. version(3.6.12) and Developer version(3.7.12+) available. Stable book 3rd ed. version is a stable version for use. If this version can meet all your demands or you don't know what functions you need, use this one. Compared to the former versions of Weka, Developer version(3.7.12+) adopts a new architecture, which provides a package manager in the tool menu. Unlike that Stable book 3rd ed. version(3.6.12) provides all the methods and classifier it can, Developer version(3.7.12+) only provides a series of basic methods and classifiers in default, however, with a new-developed package manager. If you want some classifier, open the package manager and download this classifier, then you can use it in Weka. Taking feature selection as an instance, we want to use mRMR method to select features. Fortunately, mRMR is involved in weka at version 3.5.15. We don't need to update a new version since we only need this function. Open the package manager in the existing 3.7.12 version, we can easily download and use it. 1.2 For users in different platforms Weka provides a series of versions that can run on Windows, Mac and other platforms(a zip file). For Windows and Mac users, you can directly download the corresponding version, install it and use it. However, I recommend you to download a zip version to use. When you wanna use SVM classifier in Weka 3.6.12, you will need the zip version. (How to involve libSVM in weka 3.6.12 will be depicted in another article) 2. Use Weka If you download the non-zip version, I guess you…

Mac上安装Python机器学习库scikit-learn
type: item
date: 2015-06-27T09:08:00+00:00
description: Overview 因为最近需要用到一些机器学习算法，Python的scikit-learn提供很多机器学习算法实现，可以很方便地用来做实验。今天在自己的电脑上安装了scikit-learn，并在此记录了安装的步骤。 安装pip 由于scikit-learn官方给的步骤是使用pip安装，所以要先安装pip。我是用了pip官方提供的安装页面 但是没有成功。因此想使用homebrew安装pip。使用以下命令安装： sudo brew install pip 提示如下： Homebrew provides pip via: `brew install python`. However you will thenhave two Pythons installed on your Mac, so alternatively you can:sudo easy_install pip 因为我之前已经装过了Python的easy_install，因此可以直接使用easy_install安装，命令如下： sudo easy_install pip 这样就顺利地装好了pip。 安装scikit-learn 需要安装以下包：numpy scipy scikit-learn，其中前两个是scikit-learn的依赖库，选择性安装nose,一个Python下面的测试库，可以用来测试scikit-learn。命令如下： sudo pip install -U numpy scipy scikit-learn 安装成功，并显示安装的地点： numpy in /Library/Python/2.7/site-packages scipy in /Library/Python/2.7/site-packages scikit-learn in /Library/Python/2.7/site-packages 这时候运行程序，导入sklearn，很可能出现 No module named sklearn 这个错误主要是由于Python程序找不到安装好的scikit-learn，原因是可能你的电脑里装了好几个Python，但是scikit-learn没有装到你现在用的那一个里面。 设置正确的Python 首先使用如下命令查看： port select --list python 在我的电脑上结果如下： Available versions for python: none python25-apple python26-apple python27 (active) python27-apple 现在起作用的是python27，但是要注意的是，scikit-learn安装在/Library/Python/2.7/site-packages，这个目录并不是python27的目录，而是python27-apple的目录。 解决方案：可以将scikit-learn复制到python27目录相应的位置，或者将默认的Python编译器改为python27-apple。 命令如下： sudo port select --set python python27-apple 结果如下： Selecting 'python27-apple' for 'python' succeeded. 'python27-apple' is now active. 测试scikit-learn 好啦，总算成功，使用nose测一下吧。 python -c "import nose; nose.main()" -v sklearn 或者直接在Python外使用 nosetests -v sklearn 也是可以的。 测试成功，就可以开始使用scikit-learn啦！