# encoding:utf-8
import getopt
from sklearn.preprocessing import MinMaxScaler
import os,time
from multiprocessing import Process, Manager
import pandas as pd
import numpy as np
import itertools
from sklearn.model_selection import KFold
from sklearn import svm
# from sklearn.cross_validation import train_test_split
import math
from sklearn.model_selection import *
import sklearn.ensemble
from sklearn import metrics
from sklearn.metrics import roc_curve, auc
import sys
from sklearn.model_selection import GridSearchCV
import warnings
whole_result=[]
input_files=""
whole_dimension=[]
default_l = 1
cross_validation_value = 10
CPU_value = 1
opts, args = getopt.getopt(sys.argv[1:], "hi:l:c:n:", )
final_out_to_excel=[]
row0 = [u'特征集', u'样本个数', u'分类器', u'Accuracy', u'Precision', u'Recall', u'SN', u'SP',
u'Gm', u'F_measure', u'F_score', u'MCC', u'ROC曲线面积', u'tp', u'fn', u'fp', u'tn']
final_out_to_excel.append(row0) #above was used to generate xlsx format Excel file
for op, value in opts:
if op == "-i":
input_files = str(value)
input_files = input_files.replace(" ", "").split(',')
for input_file in input_files:
if input_file == "":
print("Warning: please insure no blank in your input files !")
sys.exit()
elif op == "-l":
if int(value) == 1:
default_l = 1
else:
default_l = -1
elif op == "-c":
cross_validation_value = int(value) elif op == "-n":
CPU_value = int(value) def performance(labelArr, predictArr):
#labelArr[i] is actual value,predictArr[i] is predict value
TP = 0.; TN = 0.; FP = 0.; FN = 0.
for i in range(len(labelArr)):
if labelArr[i] == 1 and predictArr[i] == 1:
TP += 1.
if labelArr[i] == 1 and predictArr[i] == 0:
FN += 1.
if labelArr[i] == 0 and predictArr[i] == 1:
FP += 1.
if labelArr[i] == 0 and predictArr[i] == 0:
TN += 1.
if (TP + FN)==0:
SN=0
else:
SN = TP/(TP + FN) #Sensitivity = TP/P and P = TP + FN
if (FP+TN)==0:
SP=0
else:
SP = TN/(FP + TN) #Specificity = TN/N and N = TN + FP
if (TP+FP)==0:
precision=0
else:
precision=TP/(TP+FP)
if (TP+FN)==0:
recall=0
else:
recall=TP/(TP+FN)
GM=math.sqrt(recall*SP)
#MCC = (TP*TN-FP*FN)/math.sqrt((TP+FP)*(TP+FN)*(TN+FP)*(TN+FN))
return precision,recall,SN,SP,GM,TP,TN,FP,FN def worker(X_train, y_train, cross_validation_value, CPU_value, input_file, share_y_predict_dict, share_y_predict_proba_dict):
print("子进程执行中>>> pid={0},ppid={1}".format(os.getpid(),os.getppid()))
svc = svm.SVC(probability=True)
parameters = {'kernel': ['rbf'], 'C':map(lambda x:2**x,np.linspace(-2,5,7)), 'gamma':map(lambda x:2**x,np.linspace(-5,2,7))}
clf = GridSearchCV(svc, parameters, cv=cross_validation_value, n_jobs=CPU_value, scoring='accuracy')
clf.fit(X_train, y_train)
C=clf.best_params_['C']
gamma=clf.best_params_['gamma']
print('c:',C,'gamma:',gamma) y_predict=cross_val_predict(svm.SVC(kernel='rbf',C=C,gamma=gamma,),X_train,y_train,cv=cross_validation_value,n_jobs=CPU_value)
y_predict_prob=cross_val_predict(svm.SVC(kernel='rbf',C=C,gamma=gamma,probability=True),X_train,y_train,cv=cross_validation_value,n_jobs=CPU_value,method='predict_proba')
input_file = input_file.replace(".csv","")
y_predict_path = input_file + "_predict.csv"
y_predict_proba_path = input_file + "_predict_proba.csv"
share_y_predict_dict[input_file] = y_predict
share_y_predict_proba_dict[input_file] = y_predict_prob[:,1]
pd.DataFrame(y_predict).to_csv(y_predict_path, header = None, index = False)
pd.DataFrame(y_predict_prob[:,1]).to_csv(y_predict_proba_path, header = None, index = False)
print("子进程终止>>> pid={0}".format(os.getpid())) if __name__=="__main__":
print("主进程执行中>>> pid={0}".format(os.getpid()))
manager = Manager()
share_y_predict_dict = manager.dict()
share_y_predict_proba_dict = manager.dict()
ps=[]
if default_l == 1:
data = ""
x_len = 1000
y_len = 1000
file_len = len(input_files)
threshold = file_len/2
for index, input_file in enumerate(input_files):
data = pd.read_csv(input_file,header=None)
(x_len,y_len) = data.shape X_train = data.iloc[:,0:y_len-1]
y_train = data.iloc[:,[y_len-1]]
X_train = X_train.values
y_train = y_train.values
y_train = y_train.reshape(-1)
p=Process(target=worker,name="worker"+str(index),args=(X_train, y_train, cross_validation_value, CPU_value,input_file,share_y_predict_dict,share_y_predict_proba_dict))
ps.append(p)
# 开启进程
for index, input_file in enumerate(input_files):
ps[index].start() # 阻塞进程
for index, input_file in enumerate(input_files):
ps[index].join()
ensembling_prediction = 0
ensembling_prediction_proba = 0
for key, value in share_y_predict_dict.items():
ensembling_prediction = ensembling_prediction + value
ensembling_prediction = [1 if e > threshold else 0 for e in ensembling_prediction]
print(ensembling_prediction)
for key, value in share_y_predict_proba_dict.items():
ensembling_prediction_proba = ensembling_prediction_proba + value
ensembling_prediction_proba = ensembling_prediction_proba/3.0
print(ensembling_prediction_proba/3.0)
ACC=metrics.accuracy_score(y_train,ensembling_prediction)
print("ACC",ACC)
precision, recall, SN, SP, GM, TP, TN, FP, FN = performance(y_train, ensembling_prediction)
F1_Score=metrics.f1_score(y_train, ensembling_prediction)
F_measure=F1_Score
MCC=metrics.matthews_corrcoef(y_train, ensembling_prediction)
auc = metrics.roc_auc_score(y_train, ensembling_prediction_proba)
pos=TP+FN
neg=FP+TN
savedata=[str(input_files),"正:"+str(len(y_train[y_train == 1]))+'负:'+str(len(y_train[y_train == 1])),'svm',ACC,precision, recall,SN,SP, GM,F_measure,F1_Score,MCC,auc,TP,FN,FP,TN]
final_out_to_excel.append(savedata)
print("final_out_to_excel",final_out_to_excel)
pd.DataFrame(ensembling_prediction).to_csv("voting_prediction_label.csv", header = None, index = False)
pd.DataFrame(ensembling_prediction_proba).to_csv("voting_prediction_proba_label.csv", header = None, index = False)
pd.DataFrame(final_out_to_excel).to_excel('output'+'.xlsx',sheet_name="results",index=False,header=False)
print("主进程终止")
else:
data = ""
x_len = 1000
y_len = 1000
file_len = len(input_files)
threshold = file_len/2
for index, input_file in enumerate(input_files):
data = pd.read_csv(input_file,header=None)
(x_len,y_len) = data.shape
X_train = data.values
half_sequence_number = x_len / 2
y_train = np.array([1 if e < half_sequence_number else 0 for (e,value) in enumerate(X_train)])
y_train = y_train.reshape(-1)
print("default y_train: ", y_train)
p=Process(target=worker,name="worker"+str(index),args=(X_train, y_train, cross_validation_value, CPU_value,input_file,share_y_predict_dict,share_y_predict_proba_dict))
ps.append(p)
# 开启进程
for index, input_file in enumerate(input_files):
ps[index].start() # 阻塞进程
for index, input_file in enumerate(input_files):
ps[index].join()
ensembling_prediction = 0
ensembling_prediction_proba = 0
for key, value in share_y_predict_dict.items():
ensembling_prediction = ensembling_prediction + value
ensembling_prediction = [1 if e > threshold else 0 for e in ensembling_prediction]
print(ensembling_prediction)
for key, value in share_y_predict_proba_dict.items():
ensembling_prediction_proba = ensembling_prediction_proba + value
ensembling_prediction_proba = ensembling_prediction_proba/3.0
print(ensembling_prediction_proba/3.0)
ACC=metrics.accuracy_score(y_train,ensembling_prediction)
print("ACC",ACC)
precision, recall, SN, SP, GM, TP, TN, FP, FN = performance(y_train, ensembling_prediction)
F1_Score=metrics.f1_score(y_train, ensembling_prediction)
F_measure=F1_Score
MCC=metrics.matthews_corrcoef(y_train, ensembling_prediction)
auc = metrics.roc_auc_score(y_train, ensembling_prediction_proba)
pos=TP+FN
neg=FP+TN
savedata=[str(input_files),"正:"+str(len(y_train[y_train == 1]))+'负:'+str(len(y_train[y_train == 1])),'svm',ACC,precision, recall,SN,SP, GM,F_measure,F1_Score,MCC,auc,TP,FN,FP,TN]
final_out_to_excel.append(savedata)
print("final_out_to_excel",final_out_to_excel)
pd.DataFrame(ensembling_prediction).to_csv("voting_prediction_label.csv", header = None, index = False)
pd.DataFrame(ensembling_prediction_proba).to_csv("voting_prediction_proba_label.csv", header = None, index = False)
pd.DataFrame(final_out_to_excel).to_excel('output'+'.xlsx',sheet_name="results",index=False,header=False)
print("主进程终止")

该代码用于实现多个特征数据的集合输入输入同一个程序中实现程序的投票,并输入结果

最终会生成

  • 文件名_predict.csv  对应文件的预测标签
  • 文件名_predict_prob.csv 对应文件的预测分数
  • output.xlsx  最终的评估结果

example

python simple_voting.py -l 1 -c 5 -n 1 -i 1.csv,2.csv,3.csv
  • -i :表示输入的特征文件,以逗号分隔多个特征文件
  • -l : 表示是否默认csv格式特征文件尾有标签,默认为1(因此需要保证你的csv文件中尾部带有标签(1,0)),若csv默认为前一半标签为1,后一半为0,则将-l设为0
  • -c :几折交叉验证,5 代表五折交叉验证
  • -n : 是否开多进程在单个数据集训练的时候,因为是多个数据集,所以已经实现了多进程,这边设置为1较为稳妥,如果cpu核数不是很多请不要轻易增加这个值,否则可能出现不知名bug

github链接

svm+voting的更多相关文章

  1. 基于PCA和SVM的人脸识别

    程序中采用的数据集是ORL人脸库,该人脸库共有400副人脸图像,40人,每人10幅,大小为112*92像素,同一个人的表情,姿势有少许变化. 程序的流程主要分为三部分,数据的预处理(PCA降维和规格化 ...

  2. 机器学习:集成学习(Soft Voting Classifier)

    一.Hard Voting 与 Soft Voting 的对比 1)使用方式 voting = 'hard':表示最终决策方式为 Hard Voting Classifier: voting = 's ...

  3. 集成学习-Majority Voting

    认识 集成学习(Ensemble Methods), 首先是一种思想, 而非某种模型, 是一种 "群体决策" 的思想, 即对某一特定问题, 用多个模型来进行训练. 像常见的单个模型 ...

  4. 【笔记】集成学习入门之soft voting classifier和hard voting classifier

    集成学习入门之soft voting classifier和hard voting classifier 集成学习 通过构建并结合多个学习器来完成学习任务,一般是先产生一组"个体学习器&qu ...

  5. EasyPR--开发详解(6)SVM开发详解

    在前面的几篇文章中,我们介绍了EasyPR中车牌定位模块的相关内容.本文开始分析车牌定位模块后续步骤的车牌判断模块.车牌判断模块是EasyPR中的基于机器学习模型的一个模块,这个模型就是作者前文中从机 ...

  6. 8.SVM用于多分类

    从前面SVM学习中可以看出来,SVM是一种典型的两类分类器.而现实中要解决的问题,往往是多类的问题.如何由两类分类器得到多类分类器,就是一个值得研究的问题. 以文本分类为例,现成的方法有很多,其中一劳 ...

  7. 5.SVM核函数

    核函数(Kernels) 定义 1.1 (核或正定核) 设是中的一个子集,称定义在上的函数是核函数,如果存在一个从到Hilbert空间的映射 使得对任意的,都成立.其中表示Hilbert空间中的内积. ...

  8. 4. SVM分类器求解(2)

    最优间隔分类器(optimal margin classifier) 重新回到SVM的优化问题: 我们将约束条件改写为: 从KKT条件得知只有函数间隔是1(离超平面最近的点)的线性约束式前面的系数,也 ...

  9. 2. SVM线性分类器

    在一个线性分类器中,可以看到SVM形成的思路,并接触很多SVM的核心概念.用一个二维空间里仅有两类样本的分类问题来举个小例子.如图所示 和是要区分的两个类别,在二维平面中它们的样本如上图所示.中间的直 ...

随机推荐

  1. linux系统状态查看/管理相关命令

    系统状态查看命令: w 查看用户 top 系统进程监控 uptime 查看某台服务器运行了多久 htop 更加先进的交互式监控工具(需要安装) iotop 监控并实时显示磁盘IO输入和输出和程序进程( ...

  2. BP神经网络—java实现(转载)

    神经网络的结构 神经网络的网络结构由输入层,隐含层,输出层组成.隐含层的个数+输出层的个数=神经网络的层数,也就是说神经网络的层数不包括输入层.下面是一个三层的神经网络,包含了两层隐含层,一个输出层. ...

  3. 使用补丁破解IntelliJ IDEA 2017收费版本(转)

    1. 首先去官网http://www.jetbrains.com/idea/download/#section=windows下载Ultimate版(注意不是community版)下载并安装.一定要记 ...

  4. Openresty最佳案例 | 汇总

    转载请标明出处: http://blog.csdn.net/forezp/article/details/78616856 本文出自方志朋的博客 目录 Openresty最佳案例 | 第1篇:Ngin ...

  5. Java研究

    Strap   箱线图  峰度  随机过程  马尔科夫  超几何分布  贝叶斯公式 随机变量    德摩根   功率谱   残差  吸收壁   平稳随机    chorst 深入JVM OSGI    ...

  6. c#本地缓存实现

    用了一段时间java,java实现服务端程序很简单,有很多公共开源的组件或者软件.但是c#的很少. 现在准备自己写点东西,学习下新的东西,总结下c#的内容以及我们经常用的内容,抽离成类,组件,模型.方 ...

  7. 微信小程序全局/页面配置

    flex布局 父元素 display:flex; flex-direction: row; justify-content:space-between 补充 flex-direction属性决定主轴的 ...

  8. ssm整合实现注册与登录功能

    最简洁易懂的SSM整合源码都在这里了 激情提示: 1.本项目是用IDEA编写的,不管你是习惯何种ide工具,那也只是工具而已,源代码才是本质 2.本项目只拥有注册和登录功能,简易的功能和详细的注释,是 ...

  9. MySQL在同一表格里把字段值(value)给另一字段(name)

    在最近的窗帘项目中,我需要增加新的计价方法,其中就有一个是在后台输入价格的: 数据表: 购买页面 点击提交订单 那么我要算出有遮光衬布物品的价格,就必须知道我在后台设置的价格是多少 所以上代码: $i ...

  10. EpiiAdmin 开源的php交互性管理后台框架, 让复杂的交互变得更简单!Phper快速搭建交互性平台的开发框架,基于Thinkphp5.1+Adminlte3.0+Require.js。

    EpiiAdmin EpiiAdmin php开源交互性管理后台框架,基于Thinkphp5.1+Adminlte3.0+Require.js, 让复杂的交互变得更简单!Phper快速搭建交互性平台的 ...