机器学习模型训练测试完整步骤
文章的目的:这篇文章主要讲述模型的建立、以及测试的完整步骤,重点是各个步骤的关系以及作用。
文章的前提:这篇文章所有代码是用python编写,用knn算法对经典数据MNIST data(手写数字)进行建立模型。这是用一个实例说明,不用太在乎算法和数据本身。
文章结构:文章会解释每一步的作用,最后会贴出全部python代码,本文的数据下载地址:这里写链接内容
一、读取数据(原始数据)
读取数据可以看做数据收集,原始数据的状态。这里是csv文件,具体读取方式有很多,这里采用pandas的方法。
def opencsv(): # 使用pandas打开data = pd.read_csv('data/train.csv')data1 = pd.read_csv('data/test.csv')train_x = data.values[0:, 1:] # 读入全部训练数据train_y = data.values[0:, 0]result_x = data1.values[0:, 0:] # 测试全部测试个数据return train_x, train_y, result_x
二、数据预处理
数据预处理处理是对数据提前进行处理和修正。主要包括:特征提取,特征降维、特征空值处理、特征转换(one-hot)、特征归一化;目标值空值处理,目标值转换(one-hot)
(其中常用的是:降维、空值、one-hot转换、归一化。)
(这里我的数据没有经过预处理,因为原始的数据是图片像素数据,具体每一种数据在sklearn上都有方法)
三、交叉验证数据划分
为了模型测试,先选择交叉验证方法,提前划分好数据。
(注意:交叉验证会改变数据顺序,若原始数据对你有用,可以先进行交叉验证,在进行降维等预处理,接下来会演示)
def data_pro(x,y):x_train, x_test, y_train, y_test = train_test_split(x, y,test_size=0.1,random_state=33)return x_train, x_test, y_train, y_test
四、模型建立及测试
用处理好的数据建立训练模型,对模型的评价有很多参数,常用的有:得分(对的比例)、查准率、查全率、F1指数
#训练knnClf = KNeighborsClassifier() # k=5 KNN中邻值为5,knnClf.fit(x_train, ravel(y_train))#预测y_predict = knnClf.predict(x_test)print("score on the testdata:",knnClf.score(x_test,y_test))# print("score on the traindata:",knnClf.score(x_train,y_train))print(classification_report(y_test,y_predict))
五、预测的可能性计算
计算分类的概率大小
# 可能性probablity = knnClf.predict_proba(x_test)list_pro = []for i in range(probablity.shape[0]):pro = max(list(probablity[i]))list_pro.append(pro)
六、结果保存
将编号,原始结果,预测结果,预测概率保存csv
#输出index = np.array(id).reshape((-1,1))[:,0:1]result = pd.DataFrame(np.column_stack((index.reshape(-1,1),np.array(y_test).reshape(-1,1),np.array(y_predict).reshape(-1,1),np.array(list_pro).reshape(-1,1))),columns=['ImageId','test_label','predict_lable','probablity'])result.to_csv('result/knn_result.csv',index=False,header=True,encoding='gbk')
七、错误分析
错误本身就是一个很重要的东西,将错误分类保存起来。当需要对具体错误类型分析的时候,可以逐个分析错误。(比如当对‘4’分类错误比价多的时候,可以加大‘4’的权重,使得其充分训练)
#错误分析diff_index = []for i in range(result.shape[0]):diff_index.append(result['test_label'][i] != result['predict_lable'][i])print(diff_index)diff = result[diff_index]diff_x = x_test_original[diff_index]#查看每个错误for i in range(len(diff_index)):# print("label is:",diff['test_label'][i],"predict is:",diff['predict_lable'][i])print("test label is :",diff.iloc[i]['test_label'],'predict label is :',diff.iloc[i]['predict_lable'])x = diff_x[i]img = x.reshape(28,28)image_show(img)diff.to_csv('result/knn_result_diff.csv',index=False,header=True,encoding='gbk')
全部代码:
import pandas as pd
import time
from numpy import ravel, savetxt
from sklearn import svm
from sklearn.ensemble import RandomForestClassifier
from sklearn.metrics import classification_report
from sklearn.model_selection import train_test_split
from sklearn.neighbors import KNeighborsClassifier
import numpy as np
from sklearn.decomposition import PCA
import matplotlib.pyplot as pltdef image_show(img):plt.imshow(img)plt.show()def opencsv(): # 使用pandas打开data = pd.read_csv('data/train.csv')data1 = pd.read_csv('data/test.csv')train_x = data.values[0:, 1:] # 读入全部训练数据train_y = data.values[0:, 0]result_x = data1.values[0:, 0:] # 测试全部测试个数据return train_x, train_y, result_xdef data_pro(x,y):x_train, x_test, y_train, y_test = train_test_split(x, y,test_size=0.1,random_state=33)return x_train, x_test, y_train, y_testdef knnClassify(x_train, x_test, y_train, y_test):id = range(1,x_test.shape[0]+1)print("start run knn.")#训练knnClf = KNeighborsClassifier() # k=5 KNN中邻值为5,knnClf.fit(x_train, ravel(y_train))#预测y_predict = knnClf.predict(x_test)print("score on the testdata:",knnClf.score(x_test,y_test))# print("score on the traindata:",knnClf.score(x_train,y_train))print(classification_report(y_test,y_predict))# 可能性probablity = knnClf.predict_proba(x_test)list_pro = []for i in range(probablity.shape[0]):pro = max(list(probablity[i]))list_pro.append(pro)#输出index = np.array(id).reshape((-1,1))[:,0:1]result = pd.DataFrame(np.column_stack((index.reshape(-1,1),np.array(y_test).reshape(-1,1),np.array(y_predict).reshape(-1,1),np.array(list_pro).reshape(-1,1))),columns=['ImageId','test_label','predict_lable','probablity'])result.to_csv('result/knn_result.csv',index=False,header=True,encoding='gbk')#错误分析diff_index = []for i in range(result.shape[0]):diff_index.append(result['test_label'][i] != result['predict_lable'][i])print(diff_index)diff = result[diff_index]diff_x = x_test_original[diff_index]#查看每个错误for i in range(len(diff_index)):# print("label is:",diff['test_label'][i],"predict is:",diff['predict_lable'][i])print("test label is :",diff.iloc[i]['test_label'],'predict label is :',diff.iloc[i]['predict_lable'])x = diff_x[i]img = x.reshape(28,28)image_show(img)diff.to_csv('result/knn_result_diff.csv',index=False,header=True,encoding='gbk')def svmClassify(train_x, train_y, test_x):id = range(1, 28001)t = time.time()svc = svm.SVC(kernel='rbf', C=10)svc.fit(train_x, train_y)h = time.time()print('time used:%f' % (h - t))test_y = svc.predict(test_x)k = time.time()print('time used:%f' % (k - h))savetxt('sklearn_svm_Result.csv', test_y, delimiter=',')result = pd.DataFrame(np.column_stack((np.array(id).reshape((-1, 1))[:, 0:1], np.array(test_y).reshape((-1, 1))[:, 0:1])),columns=['ImageId', 'Label'])result.to_csv("sklearn_knn_Result2.csv", index=False, header=True, encoding='gbk')if __name__ == "__main__":print("start.")#原数据train_x_original, train_y_original, result_x_original = opencsv()# 交叉验证x_train_original, x_test_original, y_train, y_test = data_pro(train_x_original, train_y_original)# 降维pca = PCA(n_components=0.8, whiten=True)train_x_pca = pca.fit_transform(x_train_original)x_test_pca = pca.transform(x_test_original)result_x_pca = pca.transform(result_x_original)#knnknnClassify(train_x_pca, x_test_pca, y_train, y_test)#SVM# svmClassify(train_x,train_y,test_x)print("end.")
机器学习模型训练测试完整步骤相关推荐
- 机器学习模型训练之GPU使用
机器学习模型训练之GPU使用 1.电脑自带GPU 2.kaggle之免费GPU 3.amazon SageMaker Studio Lab 免费GPU使用推荐 深度学习框架由大量神经元组成,它们的计算 ...
- 机器学习模型训练全流程
一.机器学习模型训练全流程 1.获得原始数据集 同时包含X和Y--可以用于监督学习(回归或分类):只包含X--无监督学习. 若Y包含定量值,那么数据集(由X和Y组成)用于回归:若Y包含定性值,那么数据 ...
- 机器学习模型训练_您打算什么时候重新训练机器学习模型
机器学习模型训练 You may find a lot of tutorials which would help you build end to end Machine Learning pipe ...
- 机器学习模型训练步骤
数据 数据收集: 收集原始样本和标签,如Img和Label. 数据划分: 划分成训练集train,用来训练模型:验证集valid,验证模型是否过拟合,挑选还没有过拟合的时候的模型:测试集test,测试 ...
- 9 张手绘图:阐明机器学习模型训练全流程
Datawhale干货 译者:张峰,安徽工业大学,Datawhale成员 周末在家无聊闲逛github,发现一个很有趣的开源项目,作者用手绘图的方式讲解了机器学习模型构建的全流程,逻辑清晰.生动形象. ...
- 干货:机器学习模型训练全流程!
[提醒:公众号推送规则变了,如果您想及时收到推送,麻烦右下角点个在看,或者把本号置顶] 正文开始 周末在家无聊闲逛github,发现一个很有趣的开源项目,作者用手绘图的方式讲解了机器学习模型构建的全流 ...
- python训练模型、如何得到模型训练总时长_【绝对干货】机器学习模型训练全流程!...
周末在家无聊闲逛github,发现一个很有趣的开源项目,作者用手绘图的方式讲解了机器学习模型构建的全流程,逻辑清晰.生动形象.同时,作者也对几张图进行了详细的讲解,学习之后,收获很多,于是将其翻译下来 ...
- Kaggle Titanic Challenges 生存预测 数据预处理 模型训练 交叉验证 步骤详细解析
本博客所有内容均整理自<Hands-On Machine Learning with Scikit-Learn & TensorFlow>一书及其GitHub源码. 看<Ha ...
- 最全的机器学习模型训练全流程
简言 发现一个很有趣的开源项目,作者用手绘图的方式讲解了机器学习模型构建的全流程,逻辑清晰.生动形象.想给大家分享一下. 项目地址:https://github.com/dataprofessor/i ...
最新文章
- CentOs下卸载程序
- python简单代码input-python简单基础代码
- cf534D 枚举握手次数
- ftp 服务器的目录文件是否存在,ftp服务器的目录文件是否存在
- 解决mysql插入中文出现错误Incorrect string value: ‘\xE7\xA8\x8B\xE5\xBA\x8F...‘ for column ‘course‘ at row 1
- android studio怎么回退,如何回滚已经commit的代码(Android Studio)
- MFC中 windows object 和 C++ object
- 移动开发解决方案之玩转输入框
- spring boot 定时间任务
- [HDU1003]最长子序列和
- 13.辅助.合同管理.文档配置.知识产权.变更.流程.知识
- php读取excel文件_php读取excel文件数据的导入和导出
- 电子签名服务和云平台整合管理合同
- url传参的编码与解码
- 两款很小和强大的mp3分割软件
- 阿里云ECS迁移至腾讯云
- HTML+CSS期末网页课设——游戏宣传网页(全部源码)
- java p41——Filter过滤器
- 投影仪应用软件安装电视家纯净版, 幸福指数飙升!
- IT系统设计中的5S原则
热门文章
- 网络协议—三要素与五层网络协议
- Java重载,顺序不同也算重载
- 两个平板打天下-将中国看做一个城市圈,漉战移动互联网、高铁时代
- 编写一个“绘画系统”
- 中序线索二叉树的创建、线索化和遍历
- 华为高性能服务器实验室,1000平米全球唯一!华为神秘实验室首公开
- 三星4k3d电视测试软件,技术篇 | 央视4K超高清频道怎么看?三星电视让您大饱眼福!...
- windows10系统提示不允许使用你正在尝试的登录方式,请联系网络管理员了解详细信息
- import-from
- vue中,scss样式的三种写法——当前页面直接定义、@import引入样式、main.js引入公共样式 deep和important的写法