文章目录

  • 1 导包
  • 2 数据准备
  • 3 数据规范化
  • 4 划分数据集
  • 5 训练
  • 5 查看结果
  • 6 数据降维并画出决策边界
  • 7 混淆矩阵
  • 8 学习曲线
  • 9 验证曲线

1 导包

import time
import pickle
import numpy as np
import matplotlib.pyplot as plt
import pandas as pd
from collections import Counter
from sklearn.datasets import load_iris, load_digits
from sklearn.linear_model import LinearRegression, LogisticRegression
from sklearn.neighbors import KNeighborsRegressor, KNeighborsClassifier
from sklearn.tree import DecisionTreeRegressor, DecisionTreeClassifier
from sklearn.naive_bayes import MultinomialNB, GaussianNB, BernoulliNB
from sklearn.svm import SVR, SVC
from sklearn.neighbors import KNeighborsClassifier, KNeighborsRegressor
from sklearn.cluster import KMeans, DBSCAN
from sklearn.ensemble import BaggingRegressor, BaggingClassifier, RandomForestRegressor, RandomForestClassifier, \ExtraTreesClassifier, ExtraTreesRegressor, AdaBoostRegressor, AdaBoostClassifier, GradientBoostingClassifier, \GradientBoostingRegressor, VotingClassifier, VotingRegressor
from sklearn.neural_network import MLPClassifier, MLPRegressor
from sklearn.decomposition import PCA
from sklearn.metrics import accuracy_score, precision_score, recall_score, f1_score, r2_score, mean_squared_error, log_loss, \roc_curve, roc_auc_score, classification_report, confusion_matrix, PrecisionRecallDisplay, ConfusionMatrixDisplay
from sklearn.preprocessing import StandardScaler, OneHotEncoder, LabelBinarizer
from sklearn.model_selection import train_test_split, GridSearchCV, learning_curve, validation_curve
from sklearn.multiclass import OneVsOneClassifier, OneVsRestClassifier
from imblearn.over_sampling import RandomOverSampler
from xgboost import XGBClassifier, XGBRegressor
from lightgbm import LGBMClassifier, LGBMClassifier
from catboost import CatBoostClassifier, CatBoostRegressor
from mlxtend.classifier import StackingClassifier
from mlxtend.plotting import plot_decision_regions

2 数据准备

# Pandas设置
pd.set_option("display.max_columns", None)  # 设置显示完整的列
pd.set_option("display.max_rows", None)  # 设置显示完整的行
pd.set_option("display.expand_frame_repr", False)  # 设置不折叠数据
pd.set_option("display.max_colwidth", 100)  # 设置列的最大宽度# 加载数据集
digits = load_digits()
X, y = digits.data, digits.target
print(X.shape, y.shape)

3 数据规范化

# 数据规范化
scaler = StandardScaler()
X = scaler.fit_transform(X)

4 划分数据集

这里测试了17个模型

# 切分数据集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3)
print(X_train.shape, X_test.shape, y_train.shape, y_test.shape)

5 训练

# 训练
def multi_train(X_train, y_train, X_test, y_test, clf_names, clfs):results_df = pd.DataFrame(columns=['model_name', 'accuracy', 'precision', 'recall', 'f1', 'mse_loss', 'log_loss', 'cost_time'])count = 0for name, clf in zip(clf_names, clfs):t1 = time.time()print(name)clf = OneVsRestClassifier(clf)clf.fit(X_train, y_train)  # 训练y_predict = clf.predict(X_test)  # 预测值y_predict_prob = clf.predict_proba(X_test)  # 预测概率矩阵accuracy = accuracy_score(y_test, y_predict)  # 准确率precision = precision_score(y_test, y_predict, average='micro')  # 精确率recall = recall_score(y_test, y_predict, average='micro')  # 召回率f1 = f1_score(y_test, y_predict, average='micro')  # F1值r2 = r2_score(y_test, y_predict)
#         auc = roc_auc_score(y_test, y_predict_prob[:, -1], multi_class='ovo')  # auc值loss1 = mean_squared_error(y_test, y_predict)loss2 = log_loss(OneHotEncoder(sparse=False).fit_transform(y_test.reshape(-1, 1)), OneHotEncoder(sparse=False).fit_transform(y_predict.reshape(-1, 1)),)print(classification_report(y_test, y_predict))  # 分类报告print(confusion_matrix(y_test, y_predict))  # 混淆矩阵t2 = time.time()series =  pd.Series({"model_name": name,"accuracy": accuracy,"precision": precision,"recall": recall,"f1": f1,
#                             "auc": auc,"cost_time": t2 - t1,"mse_loss": loss1,"log_loss": loss2})# 添加新行results_df.loc[count] = seriescount += 1return results_dfclf_names = ['逻辑回归', 'KNN', '支持向量机分类', '决策树', '高斯模型', '伯努利模型', 'Bagging', '随机森林', '极限树', 'AdaBoost', 'GBDT', 'XGBoost', 'LightGBM', 'CatBoost', 'Voting', 'Stacking', 'MLP'
]
clfs = [LogisticRegression(),KNeighborsClassifier(),SVC(probability=True),DecisionTreeClassifier(),GaussianNB(),BernoulliNB(),BaggingClassifier(),RandomForestClassifier(),ExtraTreesClassifier(),AdaBoostClassifier(),GradientBoostingClassifier(),XGBClassifier(),LGBMClassifier(),CatBoostClassifier(silent=True),VotingClassifier(estimators=[('lr', LogisticRegression()), ('rf', RandomForestClassifier()), ('gnb', GaussianNB())], voting='soft', weights=[2,1,1], flatten_transform=True),StackingClassifier(classifiers=[XGBClassifier(), GaussianNB()], meta_classifier=LogisticRegression()),MLPClassifier(hidden_layer_sizes=(100, 10), max_iter=1000, activation='relu', solver='adam')
]
results_df = multi_train(X_train, y_train, X_test, y_test, clf_names, clfs)

5 查看结果

results_df

6 数据降维并画出决策边界

pca = PCA(n_components=2)
X_train2 = pca.fit_transform(X_train)
clf = LogisticRegression()
clf.fit(X_train2, y_train)
plt.figure(figsize=(10, 10))
plot_decision_regions(X=X_train2, y=y_train, clf=clf)
plt.show()

7 混淆矩阵

以LR回归为例

display = ConfusionMatrixDisplay.from_estimator(estimator=LogisticRegression().fit(X_train, y_train), X=X_test, y=y_test)

8 学习曲线

以MLP为例

# 学习曲线
mlp = MLPClassifier(hidden_layer_sizes=(100,), max_iter=1000, activation='relu', solver='adam')
mlp.fit(X_train, y_train)
xgb = XGBClassifier()
xgb.fit(X_train, y_train)
train_sizes, train_scores, test_scores = learning_curve(estimator=mlp, X=X_test, y=y_test, cv=5, train_sizes=[0.1, 0.25, 0.5, 0.75, 1], scoring='accuracy')train_scores_mean = np.mean(train_scores, axis=1)
test_scores_mean = np.mean(test_scores, axis=1)plt.plot(train_sizes, train_scores_mean, label='Training')
plt.plot(train_sizes, test_scores_mean, label='Cross-validation')
plt.xlabel('Training examples')
plt.ylabel('Accuracy')
plt.legend()
plt.show()

9 验证曲线

以XGBoost为例

# 验证曲线
param_range = [i for i in range(3, 11)]
train_scores, test_scores = validation_curve(estimator=xgb, X=X_test, param_name='max_depth', param_range=param_range, y=y_test, cv=5, scoring='accuracy')train_scores_mean = np.mean(train_scores, axis=1)
test_scores_mean = np.mean(test_scores, axis=1)
plt.plot(param_range, train_scores_mean, 'y', label='Training')
plt.plot(param_range, test_scores_mean, 'm', label='Cross-validation')
plt.xlabel('param')
plt.ylabel('Accuracy')
plt.show()

数据挖掘实战(1)——手写数字识别相关推荐

  1. 基于Paddle的计算机视觉入门教程——第7讲 实战:手写数字识别

    B站教程地址 https://www.bilibili.com/video/BV18b4y1J7a6/ 任务介绍 手写数字识别是计算机视觉的一个经典项目,因为手写数字的随机性,使用传统的计算机视觉技术 ...

  2. python手写数字识别实验报告_机器学习python实战之手写数字识别

    看了上一篇内容之后,相信对K近邻算法有了一个清晰的认识,今天的内容--手写数字识别是对上一篇内容的延续,这里也是为了自己能更熟练的掌握k-NN算法. 我们有大约2000个训练样本和1000个左右测试样 ...

  3. TensorFlow2 入门指南 | 04 分类问题实战之手写数字识别

    前言: 本专栏在保证内容完整性的基础上,力求简洁,旨在让初学者能够更快地.高效地入门TensorFlow2 深度学习框架.如果觉得本专栏对您有帮助的话,可以给一个小小的三连,各位的支持将是我创作的最大 ...

  4. 模式识别和机器学习实战-K近邻算法(KNN)- Python实现 - 约会网站配对效果判断和手写数字识别

    文章目录 前言 一. k-近邻算法(KNN) 1.算法介绍 2.举个例子--电影分类 3.步骤描述 4.来了--代码实现 二.实战之约会网站配对效果判断 1.导入数据 2.分析数据 3.数据归一化 4 ...

  5. 用MXnet实战深度学习之一:安装GPU版mxnet并跑一个MNIST手写数字识别 (zz)

    用MXnet实战深度学习之一:安装GPU版mxnet并跑一个MNIST手写数字识别 我想写一系列深度学习的简单实战教程,用mxnet做实现平台的实例代码简单讲解深度学习常用的一些技术方向和实战样例.这 ...

  6. 深度学习(4)手写数字识别实战

    深度学习(4)手写数字识别实战 Step0. 数据及模型准备 1. X and Y(数据准备) 2. out=relu{relu{relu[X@W1+b1]@W2+b2}@W3+b3}out=relu ...

  7. 深度学习数字仪表盘识别_【深度学习系列】手写数字识别实战

    上周在搜索关于深度学习分布式运行方式的资料时,无意间搜到了paddlepaddle,发现这个框架的分布式训练方案做的还挺不错的,想跟大家分享一下.不过呢,这块内容太复杂了,所以就简单的介绍一下padd ...

  8. 我的Go+语言初体验——Go+语言构建神经网络实战手写数字识别

    "我的Go+语言初体验" | 征文活动进行中- 我的Go+语言初体验--Go+语言构建神经网络实战手写数字识别 0. 前言 1. 神经网络相关概念 2. 构建神经网络实战手写数字识 ...

  9. 前馈神经网络与支持向量机实战 --- 手写数字识别

    前馈神经网络与支持向量机实战 - 手写数字识别 文章目录 前馈神经网络与支持向量机实战 --- 手写数字识别 一.前馈神经网络介绍 二.支持向量机介绍 三.数据集说明 四.环境准备 五.实验要求 六. ...

  10. 手写数字识别问题实战

    1.何为手写数字识别问题? 手写数字识别即将如下图所示的各种各样的手写体阿拉伯数字识别出来的一个过程,这个问题已经被研究的很成熟了,也有人搜集和整理了手写数字的数据集-mnist. 2.如何解决手写数 ...

最新文章

  1. linux中/bin和/sbin和/usr/bin和/usr/sbin
  2. Linux根目录详解-转自鸟哥的私房菜
  3. Python入门基础篇(五)字符串的正则表达式re模块,全面解析!!!
  4. 《敏捷生活练习》打印书籍
  5. OMP: Error #15: Initializing libiomp5md.dll, but found libiomp5md.dll already initialized.
  6. Spring_Mybatis整合实现CRUD操作
  7. C#如何快速高效地导出大量数据?
  8. 从零基础入门Tensorflow2.0 ----九、44.4 签名函数转换成savedmodel
  9. OpenCV-图像处理(21、霍夫圆变换)
  10. switch语句的ns图怎么画_ns结构流程图是什么?ns流程图怎么画?
  11. 旋转图像 顺时针与逆时针方法
  12. 网络与系统安全笔记------身份认证技术
  13. 学术日记#学术道德与人文素养
  14. 豪饮舍得酒,郭广昌刀口舔血
  15. 强密码生成器的设计与实现
  16. 一个完整的嵌入式程序_放下偏见,原来嵌入式程序员如此“妖娆”!
  17. python水印倾斜_【python PIL学习】给照片打水印
  18. Java之环境变量配置
  19. 信度不达标的处理方式
  20. 如何在面试中介绍自己的项目经验(面向java改进版)

热门文章

  1. “富春”端午狂揽过亿票房 评论褒贬两级分化
  2. Appium Doctor iOS Could not detect Mac OS X Version from sw_vers output: '10.12 '解决方法
  3. 使用在线模式更改工具修改表
  4. 每周全球科技十大新闻(2020.8.17-8.23)
  5. win10开机/睡眠唤醒的时候输入pin,不能输入字母,但是能输入数字,解决办法
  6. 常见的几种矩阵分解方式
  7. Error from server: Get “https:IP:10250/*“:dial tcp IP:10250: connect: no route to host
  8. 【2012年中山纪念中学信息学竞赛初一选拔赛一】纪中篮球联赛(b)
  9. 微信沟通的当下,你有多久没登陆过QQ?
  10. 分类器的不同的性能评价指标