测试sklearn包中常用的机器学习算法
来源:互联网 发布:gcr.io 阿里云 编辑:程序博客网 时间:2024/06/13 17:35
# 测试sklearn包中常用的几种机器学习算法,loadExcel()是我自己封装的
# 如果某些方法名想不起,要善于利用IDE的自动补全功能
# excel的最后一列是分类标签,用的是0,1整数,是否能用字符串还未测试
# 统计每类标签有多少个样本用了filter函数
# 本程序中使用的数据集只有两分类0 1,数据集的格式完全一样,如下所示。
# anaconda已经集成了sklearn包,也集成了读写excel包,不需要pip安装
# -*- coding: utf-8 -*-from sklearn import metricsfrom sklearn.neighbors import KNeighborsClassifierfrom sklearn import treefrom sklearn.svm import SVCfrom sklearn.ensemble import AdaBoostClassifier # 提升决策桩from sklearn.ensemble import RandomForestClassifier # 随机森林from sklearn.ensemble import GradientBoostingClassifier # GBDT(Gradient Boosting Decision Tree) Classifier 梯度提升决策树from numpy import *import randomimport timeimport xlrdimport xlwt# 读excel,返回一个二维数组,包括属性和类别def loadExcel(fname): bk = xlrd.open_workbook(fname) sh = bk.sheet_by_name("Sheet1") nrows = sh.nrows # 获取行数 ncols = sh.ncols # 获取列数 # 将第0行属性名存入列表 attrList = [] for col in range(0, ncols): # 列循环从0到ncols-1 attrList.append(sh.cell_value(0, col)) # print attrList # 从第一行开始获取数据 5分类 row_list = [] labelKind = [] for i in range(1, nrows): row_data = sh.row_values(i) row_list.append(row_data) # 向list中添加list # if(row_data[-1]=='fault5'): # 如果excel中类别标签是字符串,用这种方式转成整型 # row_data[-1] = 1 # labelKind.append(row_data[-1]) # labelKind = set(labelKind) # 将labelKind转成set再求大小,即可知道数据集中有多少分类 # print labelKind.__len__() return array(row_list)# SVM Classifier using cross validation 交叉验证支持向量机# 因为这个涉及网格搜索最佳参数,所以封装起来了def svm_cross_validation(train_x, train_y): from sklearn.grid_search import GridSearchCV from sklearn.svm import SVC model = SVC(kernel='rbf', probability=True) param_grid = {'C': [1e-3, 1e-2, 1e-1, 1, 10, 100, 1000], 'gamma': [0.001, 0.0001]} grid_search = GridSearchCV(model, param_grid, n_jobs = 1, verbose=1) grid_search.fit(train_x, train_y) best_parameters = grid_search.best_estimator_.get_params() for para, val in best_parameters.items(): print para, val model = SVC(kernel='rbf', C=best_parameters['C'], gamma=best_parameters['gamma'], probability=True) model.fit(train_x, train_y) return model # 主函数if __name__ == '__main__': # 调用scikit中的分类器,datingDataMat可以是ndarray或者matrix,datingLabels必须是list trainData = loadExcel('train.xlsx') testData = loadExcel('test.xlsx') rows_train, features_train = shape(trainData) rows_test, features_test = shape(testData) print u'训练集样本数:%d' % rows_train print u'测试集样本数:%d' % rows_test print (u'特征维数:%d' % (features_train-1)) # 将最后一列抽出来转成set,便可得到分类数 # 将训练集和测试集的属性向量和类别向量分开 train_attr = trainData[:, 0:features_train-1] # 训练集的属性矩阵,numpy.ndarray train_label = trainData[:, -1] # 类别向量,numpy.ndarray test_attr = testData[:, 0:features_train-1] test_label = testData[:, -1] # 训练模型:设置模型参数 # model = KNeighborsClassifier() # KNN # model = tree.DecisionTreeClassifier() # 决策树 # model = SVC(kernel='rbf', C=1000, gamma=0.001, probability=True) # 支持向量机 # model = GradientBoostingClassifier(n_estimators=200) # 梯度提升决策树 # model = RandomForestClassifier(n_estimators=8) # 随机森林 model = AdaBoostClassifier(n_estimators=100) # 提升决策桩 # model = svm_cross_validation() # 交叉验证支持向量机 # 用训练集开始训练模型 model.fit(train_attr, train_label) # 预测结果(硬输出),预测结果list predict = model.predict(test_attr) faultname=['变频器超速','变频器未就绪','变频器脱网','电网频率过高','正常'] # 这个没用到 for i in range(rows_test): # time.sleep(0.5) if test_label[i] == predict[i]: print(u'当前数据的实际分类标签是:%s ,模型的预测输出类别是:%s ,预测分类与实际分类是否相符:true' %(test_label[i], predict[i])) else: print(u'当前数据的实际分类标签是:%d ,模型的预测输出类别是:%d ,预测分类与实际分类是否相符:false*******' %(test_label[i], predict[i])) # 准确率 accuracy = metrics.accuracy_score(test_label, predict) print u'model的分类准确率为:%f' % (accuracy) # 召回率 recall = metrics.recall_score(test_label, predict) print 'precision: %.2f%%, recall: %.2f%%' % (100 * accuracy, 100 * recall) # 测试集中各类别的样本数filter list1 = filter(lambda x: x == 1, test_label) label1_num = list1.__len__() print u"测试集中第一类样本的个数为:%d" %label1_num # print u"model1混淆矩阵如下:" # 混淆矩阵的计算以后再讨论 # print confusionMatrix # print u'模型1对第一类分类正确的比例为%f' % label1_precison # 根据混淆矩阵做计算
阅读全文
0 0
- 测试sklearn包中常用的机器学习算法
- 机器学习:R包与python的sklearn库中默认决策树模型的区别
- python中安装机器学习(sklearn)必要的包和模块
- 安装Python的机器学习包Sklearn 出错解决方法
- Python机器学习包的sklearn中的Gridsearch简单使用
- Python的机器学习库Sklearn中重要模块及其常用函数整理
- 机器学习教程 之 SKlearn 中 PCA 算法的运用:人脸识别实例
- sklearn ------------机器学习的万能钥匙
- sklearn机器学习常用过程总结
- sklearn机器学习常用数据处理总结
- sklearn机器学习库中数据的标准化
- python中sklearn机器学习实现的博客
- scikit learn(sklearn)机器学习算法选择
- Sklearn包含的常用算法
- 机器学习中评估算法的常用评价指标
- 【机器学习sklearn】基于sklearn的股票预测
- 机器学习算法包
- 【机器学习】Python sklearn包的使用示例以及参数调优示例
- 滕王阁序---王勃
- 迭代器模式
- hdu 1576 A/B 求逆元模板题
- Android应用开发-学生信息管理系统
- C++中#define中的#与##作用和区别
- 测试sklearn包中常用的机器学习算法
- 本地eclipse连接外网Hadoop
- 关于C#中的内存理解
- SQL 常用语法一
- PHP学习笔记——each()函数的特性
- 使用RMS API 自定义Office(Word、Excel、PPT)加密策略
- json字符串转换成json数组并遍历属性值
- CSS文本属性
- 2736 FunctionTemplate(eden)