文章的目的:这篇文章主要讲述模型的建立、以及测试的完整步骤,重点是各个步骤的关系以及作用。
文章的前提:这篇文章所有代码是用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.")

机器学习模型训练测试完整步骤相关推荐

  1. 机器学习模型训练之GPU使用

    机器学习模型训练之GPU使用 1.电脑自带GPU 2.kaggle之免费GPU 3.amazon SageMaker Studio Lab 免费GPU使用推荐 深度学习框架由大量神经元组成,它们的计算 ...

  2. 机器学习模型训练全流程

    一.机器学习模型训练全流程 1.获得原始数据集 同时包含X和Y--可以用于监督学习(回归或分类):只包含X--无监督学习. 若Y包含定量值,那么数据集(由X和Y组成)用于回归:若Y包含定性值,那么数据 ...

  3. 机器学习模型训练_您打算什么时候重新训练机器学习模型

    机器学习模型训练 You may find a lot of tutorials which would help you build end to end Machine Learning pipe ...

  4. 机器学习模型训练步骤

    数据 数据收集: 收集原始样本和标签,如Img和Label. 数据划分: 划分成训练集train,用来训练模型:验证集valid,验证模型是否过拟合,挑选还没有过拟合的时候的模型:测试集test,测试 ...

  5. 9 张手绘图:阐明机器学习模型训练全流程

    Datawhale干货 译者:张峰,安徽工业大学,Datawhale成员 周末在家无聊闲逛github,发现一个很有趣的开源项目,作者用手绘图的方式讲解了机器学习模型构建的全流程,逻辑清晰.生动形象. ...

  6. 干货:机器学习模型训练全流程!

    [提醒:公众号推送规则变了,如果您想及时收到推送,麻烦右下角点个在看,或者把本号置顶] 正文开始 周末在家无聊闲逛github,发现一个很有趣的开源项目,作者用手绘图的方式讲解了机器学习模型构建的全流 ...

  7. python训练模型、如何得到模型训练总时长_【绝对干货】机器学习模型训练全流程!...

    周末在家无聊闲逛github,发现一个很有趣的开源项目,作者用手绘图的方式讲解了机器学习模型构建的全流程,逻辑清晰.生动形象.同时,作者也对几张图进行了详细的讲解,学习之后,收获很多,于是将其翻译下来 ...

  8. Kaggle Titanic Challenges 生存预测 数据预处理 模型训练 交叉验证 步骤详细解析

    本博客所有内容均整理自<Hands-On Machine Learning with Scikit-Learn & TensorFlow>一书及其GitHub源码. 看<Ha ...

  9. 最全的机器学习模型训练全流程

    简言 发现一个很有趣的开源项目,作者用手绘图的方式讲解了机器学习模型构建的全流程,逻辑清晰.生动形象.想给大家分享一下. 项目地址:https://github.com/dataprofessor/i ...

最新文章

  1. CentOs下卸载程序
  2. python简单代码input-python简单基础代码
  3. cf534D 枚举握手次数
  4. ftp 服务器的目录文件是否存在,ftp服务器的目录文件是否存在
  5. 解决mysql插入中文出现错误Incorrect string value: ‘\xE7\xA8\x8B\xE5\xBA\x8F...‘ for column ‘course‘ at row 1
  6. android studio怎么回退,如何回滚已经commit的代码(Android Studio)
  7. MFC中 windows object 和 C++ object
  8. 移动开发解决方案之玩转输入框
  9. spring boot 定时间任务
  10. [HDU1003]最长子序列和
  11. 13.辅助.合同管理.文档配置.知识产权.变更.流程.知识
  12. php读取excel文件_php读取excel文件数据的导入和导出
  13. 电子签名服务和云平台整合管理合同
  14. url传参的编码与解码
  15. 两款很小和强大的mp3分割软件
  16. 阿里云ECS迁移至腾讯云
  17. HTML+CSS期末网页课设——游戏宣传网页(全部源码)
  18. java p41——Filter过滤器
  19. 投影仪应用软件安装电视家纯净版, 幸福指数飙升!
  20. IT系统设计中的5S原则

热门文章

  1. 网络协议—三要素与五层网络协议
  2. Java重载,顺序不同也算重载
  3. 两个平板打天下-将中国看做一个城市圈,漉战移动互联网、高铁时代
  4. 编写一个“绘画系统”
  5. 中序线索二叉树的创建、线索化和遍历
  6. 华为高性能服务器实验室,1000平米全球唯一!华为神秘实验室首公开
  7. 三星4k3d电视测试软件,技术篇 | 央视4K超高清频道怎么看?三星电视让您大饱眼福!...
  8. windows10系统提示不允许使用你正在尝试的登录方式,请联系网络管理员了解详细信息
  9. import-from
  10. vue中,scss样式的三种写法——当前页面直接定义、@import引入样式、main.js引入公共样式 deep和important的写法