一、内容实现概述
本文主要讲述使用scikit-learn库内置的kNN模型,实现手写数字识别
预测房价实现过程如下:
- 导入所需库:预先导入pandas、matplotlib以及scikit-learn库
- 导入数据:使用pandas库的文件解析方法read_csv(),读取房价文件数据
- 数据预处理:对房价数据进行预处理,获得特征数据与目标数据
- 数据分割:使用sklearn库的数据分割方法对步骤3中的数据进行比例分割,得到训练集和测试集数据
- 构建线性回归模型:调用sklearn库的线性模型类LinearRegression构建模型
- 训练模型:调用sklearn库的fit()方法对训练集数据进行训练
- 预测模型:调用sklearn库的predict()方法对测试集数据进行预测
- 绘制预测结果:调用matplotlib库的plot()与show()进行绘制并展示预测结果
- 评估模型:由于该模型是回归模型,所以调用sklearn库的均方误差评估方法
mean_squared_error()
进行评估
注:
- 在Python中使用(导入)numpy库时,需要先安装,本实现使用的是pip命令安装 pip install numpy
- 在Python中使用(导入)scikit-learn框架时,需要先安装,本实现使用的是pip命令安装 pip install -U scikit-learn
- Scikit-Learn官方教程
二、代码实现
注:源代码地址
# 主题:使用kNN(k-最近邻)算法实现手写数字识别 import sys, os # 1. 将当前项目的根目录(C:\Users\accountName\projects\machine-learning)加入到系统路径中 sys.path.append(os.getcwd()) # 2. 将不在同一目录下的knn模块的classify0函数导入到该文件中去使用 from machinelearninginaction.Ch02.kNN import classify0 import numpy as np # 将图像转换为向量。这里将把一个32×32的二进制图像矩阵转换为1×1024的向量 def image2vector(filename): vector = np.zeros((1, 1024)) with open(filename, 'r') as file: for line_index in range(32): lineStr = file.readline().strip() for j in range(len(lineStr)): vector[0, 32 * line_index + j] = int(lineStr[j]) return vector # 识别手写数字 def handwritingClassTest(): # 将训练集中的图像矩阵转换成向量 # 获取trainingDigits目录列表 trainFileList = os.listdir("machinelearninginaction\\Ch02\\trainingDigits") testFileCount = len(trainFileList) trainVector = np.zeros((testFileCount, 1024)) trainLabel = [] for index in range(testFileCount): fileStr = trainFileList[index] fileName = fileStr.split('.')[0] classificationNum = int(fileName.split('_')[0]) trainLabel.append(classificationNum) trainVector[index, :] = image2vector("machinelearninginaction\\Ch02\\trainingDigits\\%s" % fileStr) # 此处使用‘%s’字符串占位符来插入fileStr # 验证测试集中数字图像识别的结果 testDigitsDirPath = "machinelearninginaction\\Ch02\\testDigits" testFileList = os.listdir(testDigitsDirPath) testFileCount = len(testFileList) errCount = 0.0 for index in range(testFileCount): fileStr = testFileList[index] fileName = fileStr.split('.')[0] classificationNum = int(fileName.split('_')[0]) testVector = image2vector(testDigitsDirPath + "\\%s" % fileStr) pred_result = classify0(testVector, trainVector, trainLabel, 3) # print(f"模型手写数字识别的预测结果:{pred_result}, 实际结果为:{classificationNum}") if pred_result != classificationNum: errCount += 1.0 print("手写数字识别准确率:", (float(testFileCount) - errCount) / float(testFileCount)) print("测试集手写数字识别错误数量:", errCount) print("手写数字识别错误率:", errCount / float(testFileCount)) handwritingClassTest()
三、运行结果
标签:kNN,index,fileStr,模型,testFileCount,Machine,Learning,手写,识别 From: https://www.cnblogs.com/xl1164191281/p/18677181