机器学习扩展包MLXtend绘制分类模型决策边界

公众号:尤而小屋
编辑:Peter
作者:Peter

大家好,我是Peter~

继续更新机器学习扩展包MLxtend的文章。本文介绍如何使用MLxtend来绘制与分类模型相关的决策边界decision_regions

导入库

导入相关用于数据处理和建模的库:

import numpy as np
import pandas as pdimport matplotlib
import matplotlib.pyplot as plt
import matplotlib.gridspec as gridspec
from matplotlib import cm
plt.rcParams['font.sans-serif']=['SimHei'] #用来正常显示中文标签
plt.rcParams['axes.unicode_minus'] = False #用来正常显示负号import itertoolsfrom sklearn import datasets
from sklearn.linear_model import LogisticRegression # 逻辑回归分类
from sklearn.svm import SVC  # SVC
from sklearn.ensemble import RandomForestClassifier  # 随机森林分类
from mlxtend.classifier import EnsembleVoteClassifier  # 从mlxtend导入集成投票表决分类算法
from mlxtend.data import iris_data # 内置数据集
from mlxtend.plotting import plot_decision_regions  # 绘制决策边界import warnings
warnings.filterwarnings('ignore')

1维决策边界(Decision regions in 1D)

X,y = iris_data()
X[:3]  # names = ['sepal length', 'sepal width','petal length', 'petal width']array([[5.1, 3.5, 1.4, 0.2],[4.9, 3. , 1.4, 0.2],[4.7, 3.2, 1.3, 0.2]])
X = X[:,2]  # 只取第二个特征
# X = X[:,None]  # 转成2维数组;下同
X = X.reshape(-1,1)
X[:5]array([[1.4],[1.4],[1.3],[1.5],[1.4]])

建立模型:

svm = SVC(C=0.5,kernel="linear")
svm.fit(X,y)

绘制决策边界图形:

plot_decision_regions(X,y,clf=svm,legend=2)plt.xlabel("sepal width")
plt.title("SVM on Iris Datasets based on 1D")
plt.show()

2维决策边界(Decision regions in 2D)

X,y = iris_data()
X = X[:,:2]  # 选择两个特征用于建模和可视化
X[:10]

输出结果为:

array([[5.1, 3.5],[4.9, 3. ],[4.7, 3.2],[4.6, 3.1],[5. , 3.6],[5.4, 3.9],[4.6, 3.4],[5. , 3.4],[4.4, 2.9],[4.9, 3.1]])

建立模型:

svm = SVC(C=0.5,kernel="linear")
svm.fit(X,y)

绘制决策边界图形:

plot_decision_regions(X,y,clf=svm,legend=2)plt.xlabel("sepal length")
plt.ylabel("sepal width")
plt.title("SVM on Iris Datasets based on 2D")
plt.show()

多模型决策边界(Decision Region Grids)

# 导入4个分类模型
from sklearn.linear_model import LogisticRegression
from sklearn.naive_bayes import GaussianNB 
from sklearn.ensemble import RandomForestClassifier
from sklearn.svm import SVCimport numpy as npimport matplotlib.pyplot as plt
import matplotlib.gridspec as gridspec
plt.rcParams['font.sans-serif']=['SimHei'] #用来正常显示中文标签
plt.rcParams['axes.unicode_minus'] = False #用来正常显示负号import itertoolsfrom mlxtend.data import iris_data # 内置数据集
from mlxtend.plotting import plot_decision_regions

4个模型的初始化:

clf1 = LogisticRegression(random_state=1,solver='newton-cg',multi_class='multinomial')
clf2 = RandomForestClassifier(random_state=1, n_estimators=100)
clf3 = GaussianNB()
clf4 = SVC(gamma='auto')

导入数据集:

X,y = iris_data()
X = X[:,:2]  # 选择2个特征建模

4个模型的迭代训练与可视化:

gs = gridspec.GridSpec(2,2)  # 2*2的网格面fig = plt.figure(figsize=(10,8))labels = ['Logistic Regression', 'Random Forest', 'Naive Bayes', 'SVM']for clf,lab,grd in zip([clf1, clf2, clf3, clf4],labels,itertools.product([0,1], repeat=2)):clf.fit(X,y)ax = plt.subplot(gs[grd[0], grd[1]])fig = plot_decision_regions(X=X, y=y, clf=clf, legend=2)plt.title(lab)plt.show()

高亮测试数据集Highlighting test data

from mlxtend.plotting import plot_decision_regions
from mlxtend.data import iris_data # 内置数据集
from mlxtend.plotting import plot_decision_regionsimport matplotlib.pyplot as plt
plt.rcParams['font.sans-serif']=['SimHei'] #用来正常显示中文标签
plt.rcParams['axes.unicode_minus'] = False #用来正常显示负号from sklearn.svm import SVC
from sklearn.model_selection import train_test_split

导入数据集并切分:

X,y = iris_data()
X = X[:,:2]  # 选择前2个特征建模# 切分数据集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.33, random_state=0)

模型训练:

svm =SVC(C=0.5, kernel="linear")
svm.fit(X_train, y_train)
plot_decision_regions(X, y, clf=svm, legend=2, X_highlight=X_test)plt.xlabel('sepal length')
plt.ylabel('petal length')
plt.title('SVM on Iris with Highlighting Test Data Points')
plt.show()

评估分类器在非线性问题的表现Evaluating Classifier Behavior on Non-Linear Problems

import matplotlib.pyplot as plt
import matplotlib.gridspec as gridspecimport itertools
from mlxtend.plotting import plot_decision_regions
import numpy as np
from sklearn.linear_model import LogisticRegression
from sklearn.naive_bayes import GaussianNB 
from sklearn.ensemble import RandomForestClassifier
from sklearn.svm import SVC# 定义4个模型
clf1 = LogisticRegression(random_state=1, solver='lbfgs')
clf2 = RandomForestClassifier(n_estimators=100, random_state=1)
clf3 = GaussianNB()
clf4 = SVC(gamma='auto')

XOR问题

X = np.random.randn(300, 2)  # 300*2;符合正态分布的数组
X[:5]array([[-1.96399101, -0.13610581],[-1.4832503 , -0.01927823],[-2.32101114,  0.09310347],[ 1.85377755,  0.08739847],[-1.26535948,  0.75706403]])
# np.logical_xor用于计算两个布尔数组之间的逐元素逻辑异或。当两个输入数组中的元素相同,为False;当不同时,结果为True。y = np.array(np.logical_xor(X[:, 0] > 0, X[:, 1] > 0),  # 两个特征的是否都大于0;使用异或的结果dtype=int)y[:10]  # 0-表示False,1-表示Truearray([0, 0, 1, 0, 1, 1, 1, 0, 1, 0])
gs = gridspec.GridSpec(2, 2)  # 创建2*2的网格布局fig = plt.figure(figsize=(10,8))  # 图像大小
labels = ['Logistic Regression', 'Random Forest', 'Naive Bayes', 'SVM']  # 模型名称for clf, lab, grd in zip([clf1, clf2, clf3, clf4], # 模型clf + 名称lab + 位置grd(00,01,10,11)labels,itertools.product([0, 1], repeat=2)):clf.fit(X, y)  # 模型拟合ax = plt.subplot(gs[grd[0], grd[1]])  # grd[0]-row  grd[1]-columnfig = plot_decision_regions(X=X, y=y, clf=clf, legend=2)  # 绘制决策边界plt.title(lab)  # 模型名称plt.show()

半月数据集的分类Half-Moons

make_moons是Scikit-learn库中的一个函数,用于生成具有两个弯月形状的数据集。它通常用于测试分类算法在非线性可分数据上的性能。

该函数的基本用法如下:

from sklearn.datasets import make_moonsX, y = make_moons(n_samples=100, noise=0.1, random_state=42)

其中,n_samples参数指定生成的数据点数量,noise参数指定数据的噪声水平(0表示无噪声,越大表示噪声越多),random_state参数用于设置随机数生成器的种子以确保结果的可重复性。

from sklearn.datasets import make_moons
X, y = make_moons(n_samples=100, random_state=123) # 生成弯月数据集gs = gridspec.GridSpec(2, 2)fig = plt.figure(figsize=(10,8))labels = ['Logistic Regression', 'Random Forest', 'Naive Bayes', 'SVM']
for clf, lab, grd in zip([clf1, clf2, clf3, clf4],labels,itertools.product([0, 1], repeat=2)):clf.fit(X, y)ax = plt.subplot(gs[grd[0], grd[1]])fig = plot_decision_regions(X=X, y=y, clf=clf, legend=2)plt.title(lab)plt.show()

同心圆数据的分类Concentric Circles

from sklearn.datasets import make_circles  # 生成同心圆数据集
X, y = make_circles(n_samples=1000, random_state=123, noise=0.1, factor=0.2)gs = gridspec.GridSpec(2, 2)fig = plt.figure(figsize=(10,8))labels = ['Logistic Regression', 'Random Forest', 'Naive Bayes', 'SVM']
for clf, lab, grd in zip([clf1, clf2, clf3, clf4],labels,itertools.product([0, 1], repeat=2)):clf.fit(X, y)ax = plt.subplot(gs[grd[0], grd[1]])fig = plot_decision_regions(X=X, y=y, clf=clf, legend=2)plt.title(lab)plt.show()

基于子图的分类决策边界

import matplotlib.pyplot as plt
from mlxtend.plotting import plot_decision_regions
from mlxtend.data import iris_data # 内置数据集from sklearn.linear_model import LogisticRegression
from sklearn.naive_bayes import GaussianNB 
from sklearn import datasets
import numpy as npX,y = iris_data()
X = X[:,2]
X = np.array(X).reshape(-1,1)

建立两个模型并训练:

clf1 = LogisticRegression(random_state=1,solver='lbfgs',multi_class='multinomial')clf2 = GaussianNB()
clf1.fit(X, y)
clf2.fit(X, y)

创建图形对象fig和ax绘图对象:

fig, axes = plt.subplots(1,2,figsize=(10,3))  # 创建1*2的图形fig = plot_decision_regions(X=X, y=y, clf=clf1, ax=axes[0], legend=2) 
fig = plot_decision_regions(X=X, y=y, clf=clf2, ax=axes[1], legend=1)plt.show()

基于多特征的决策边界

from mlxtend.plotting import plot_decision_regions
import matplotlib.pyplot as plt
from sklearn import datasets
from sklearn.svm import SVCX, y = datasets.make_blobs(n_samples=600, # 样本数n_features=3,  # 特征数centers=[[2, 2, -2],[-2, -2, 2]], # 聚类中心cluster_std=[2, 2],  # 聚类方差random_state=2  # 随机种子
)

建立SVM模型并训练:

svm = SVC(gamma="auto")
svm.fit(X,y)
fig, ax = plt.subplots()value = 1.5
width = 0.75plot_decision_regions(X,y,clf=svm,# Filler values must be provided when X has more than 2 training features.# 多个特征该参数必须有filler_feature_values={2: value},  filler_feature_ranges={2: width},legend=2,ax=ax)ax.set_xlabel("Feature1")
ax.set_ylabel("Feature2")
ax.set_title("Feature3={}".format(value))fig.suptitle("SVM on make_blobs")plt.show()

决策边界的网格切片

from mlxtend.plotting import plot_decision_regions
import matplotlib.pyplot as plt
from sklearn import datasets
from sklearn.svm import SVCX, y = datasets.make_blobs(n_samples=600, # 样本数n_features=3,  # 特征数centers=[[2, 2, -2],[-2, -2, 2]], # 聚类中心cluster_std=[2, 2],  # 聚类方差random_state=2  # 随机种子
)# 模型训练
svm = SVC(gamma="auto")
svm.fit(X,y)fig, axarr = plt.subplots(2, 2, figsize=(10,8), sharex=True, sharey=True)
values = [-4.0, -1.0, 1.0, 4.0]
width = 0.75for value, ax in zip(values, axarr.flat):plot_decision_regions(X,y,clf=svm,filler_feature_values={2: value},filler_feature_ranges={2: width},legend=2,ax=ax)ax.set_xlabel("Feature1")ax.set_ylabel("Feature2")ax.set_title("Feature3={}".format(value))fig.suptitle('SVM on make_blobs')
plt.show()

自定义绘图风格

from mlxtend.plotting import plot_decision_regions
from mlxtend.data import iris_data # 内置数据集
from mlxtend.plotting import plot_decision_regions
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif']=['SimHei'] #用来正常显示中文标签
plt.rcParams['axes.unicode_minus'] = False #用来正常显示负号
from sklearn.svm import SVC
from sklearn.model_selection import train_test_split# 导入和切分数据
X,y = iris_data()
X = X[:,:2]  # 选择前2个特征建模
# 切分数据集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.33, random_state=0)

建立模型和训练:

svm = SVC(C=0.5, kernel='linear')
svm.fit(X_train, y_train)

自定义绘图风格:

scatter_kwargs = {'s': 120, 'edgecolor': None, 'alpha': 0.7}
contourf_kwargs = {'alpha': 0.2}
scatter_highlight_kwargs = {'s': 120, 'label': 'Test data', 'alpha': 0.7}# 绘制决策边界
plot_decision_regions(X, y, clf=svm, legend=2,X_highlight=X_test, #  高亮数据scatter_kwargs=scatter_kwargs,contourf_kwargs=contourf_kwargs,scatter_highlight_kwargs=scatter_highlight_kwargs)# 添加坐标轴标注
plt.xlabel('sepal length')
plt.ylabel('petal length')
plt.title('SVM on Iris')
plt.show()

自定义图例legend

from mlxtend.plotting import plot_decision_regions
from mlxtend.data import iris_data # 内置数据集
from mlxtend.plotting import plot_decision_regions
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif']=['SimHei'] #用来正常显示中文标签
plt.rcParams['axes.unicode_minus'] = False #用来正常显示负号
from sklearn.svm import SVC
from sklearn.model_selection import train_test_split# 导入和切分数据
X,y = iris_data()
X = X[:,:2]  # 选择前2个特征建模
# 切分数据集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.33, random_state=0)
svm = SVC(C=0.5, kernel='linear')
svm.fit(X_train, y_train)

修改图例:

ax = plot_decision_regions(X,y,clf=svm, legend=0)plt.xlabel('sepal length')
plt.ylabel('petal length')
plt.title('SVM on Iris')# 自定义图例
handles, labels = ax.get_legend_handles_labels()
ax.legend(handles, ['class square','class triangle','class circle'], framealpha=0.3, scatterpoints=1)plt.show()

基于缩放因子的决策边界可视化zoom factors

from mlxtend.plotting import plot_decision_regions
from mlxtend.data import iris_data # 内置数据集
from mlxtend.plotting import plot_decision_regions
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif']=['SimHei'] #用来正常显示中文标签
plt.rcParams['axes.unicode_minus'] = False #用来正常显示负号
from sklearn.svm import SVC
from sklearn.model_selection import train_test_splitX,y = iris_data()
X = X[:,:2]  
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.33, random_state=0)
svm = SVC(C=0.5, kernel='linear')
svm.fit(X_train, y_train)

1、默认的缩放因子zoom_factor=1.0:

plot_decision_regions(X, y, clf=svm, zoom_factor=1.)
plt.show()

2、使用不同的缩放因子:

plot_decision_regions(X, y, clf=svm, zoom_factor=0.1)
plt.show()

plot_decision_regions(X, y, clf=svm, zoom_factor=2)
plt.xlim(5, 6)
plt.ylim(2, 5)
plt.show()

使用Onehot编码输出的分类器onehot-encoded outputs (Keras)

定义了一个名为Onehot2Int的类,该类用于将模型预测的one-hot编码结果转换为整数

import matplotlib.pyplot as plt
import numpy as np
np.random.seed(123)import keras
from keras.models import Sequential
from keras.layers import Dense
from keras.utils import to_categoricalfrom mlxtend.data import iris_data
from mlxtend.preprocessing import standardize
from mlxtend.plotting import plot_decision_regions
class Onehot2Int(object):# 参数为model;表示需要转换预测结果的模型def __init__(self, model):  self.model = model# X表示输入def predict(self, X):y_pred = self.model.predict(X)  # 预测return np.argmax(y_pred, axis=1) # 找到每行中最大值的索引,即one-hot编码中1的位置,返回这些索引组成的数组

数据预处理:

X, y = iris_data()
X = X[:, [2, 3]]X = standardize(X)  # 标准化
y_onehot = to_categorical(y) # 独热编码

建立网络模型:

model = Sequential()
model.add(Dense(8, input_shape=(2,), activation='relu', kernel_initializer='he_uniform'))model.add(Dense(4, activation='relu', kernel_initializer='he_uniform'))model.add(Dense(3, activation='softmax'))

模型编译和训练:

model.compile(loss="categorical_crossentropy", optimizer=keras.optimizers.Adam(lr=0.005), metrics=['accuracy'])history = model.fit(X, y_onehot, epochs=10,batch_size=5, verbose=1, validation_split=0.1)
    Epoch 1/1027/27 [==============================] - 0s 7ms/step - loss: 0.9506 - accuracy: 0.6074 - val_loss: 1.0899 - val_accuracy: 0.0000e+00Epoch 2/1027/27 [==============================] - 0s 2ms/step - loss: 0.7453 - accuracy: 0.6963 - val_loss: 1.0886 - val_accuracy: 0.0000e+00Epoch 3/1027/27 [==============================] - 0s 1ms/step - loss: 0.6098 - accuracy: 0.7185 - val_loss: 1.0572 - val_accuracy: 0.0000e+00Epoch 4/1027/27 [==============================] - 0s 2ms/step - loss: 0.5159 - accuracy: 0.7333 - val_loss: 1.0118 - val_accuracy: 0.0000e+00Epoch 5/1027/27 [==============================] - 0s 1ms/step - loss: 0.4379 - accuracy: 0.7630 - val_loss: 0.9585 - val_accuracy: 0.8000Epoch 6/1027/27 [==============================] - 0s 2ms/step - loss: 0.3784 - accuracy: 0.8815 - val_loss: 0.8806 - val_accuracy: 0.9333Epoch 7/1027/27 [==============================] - 0s 1ms/step - loss: 0.3378 - accuracy: 0.9407 - val_loss: 0.8155 - val_accuracy: 1.0000Epoch 8/1027/27 [==============================] - 0s 2ms/step - loss: 0.3130 - accuracy: 0.9481 - val_loss: 0.7535 - val_accuracy: 1.0000Epoch 9/1027/27 [==============================] - 0s 2ms/step - loss: 0.2893 - accuracy: 0.9259 - val_loss: 0.6859 - val_accuracy: 1.0000Epoch 10/1027/27 [==============================] - 0s 2ms/step - loss: 0.2695 - accuracy: 0.9481 - val_loss: 0.6258 - val_accuracy: 1.0000
model_no_ohe = Onehot2Int(model)  # 将现有模型转成one-hot处理后的模型# 绘制决策边界
plot_decision_regions(X, y, clf=model_no_ohe)
plt.show()  9600/9600 [==============================] - 5s 555us/step

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/849397.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

技术对比:eMMC、SD NAND与NOR Flash存储特性详解

在电子技术迅猛前进的今天,存储技术成为了整个行业发展的基石。SD NAND、eMMC和NOR Flash,这三种存储技术各自以其独特的架构和特性,满足了多样化的存储需求。让我们来看看它们之间的一些关键对比: 1. 存储单元架构: S…

Perfectly Clear WorkBench v4 解锁版安装教程 (图像修复增强工具)

前言 Perfectly Clear WorkBench 是一款图像修复工具,可以帮助用户对自己的图片素材进行修复,很多的照片因为拍摄问题,或者设备限制,会导致拍摄效果不好,使用这款软件可以进行一定程度的修复,当拍摄时亮度…

Ant Design+react 表单只读

表单禁用,样式不好看,不符合甲方标准,看了一下文档,select、radio等都不支持只读状态。 解决方法: 利用css3的point-events属性,设置为none 在查看弹窗时,传入一个变量,当变量为true…

了解光隔离器和光耦合器:主要区别和应用

光隔离器和光耦合器是现代电子电路中必不可少的组件,提供一项关键功能:电路不同部分之间的电气隔离。虽然它们在许多方面相似且经常互换使用,但两者之间存在明显差异,主要基于它们的工作电压能力。本文深入探讨了这些组件的基础知…

最新23道vue2+vue3面试题带答案汇总

文章目录 MVVM与MVC的区别Vue 2与Vue 3的主要区别Vue 3的优势Vue 2 是如何实现数据绑定的?Vue 2 中的 v-model 是如何工作的?Vue 2 的生命周期钩子有哪些?Vue 3 使用了什么技术来实现响应式系统?Vue 3 中的 Composition API 带来了…

windows系统内查看电脑SN号

cmd命令行模式下,输入代码wmic bios get serialnumber可以查看到当前计算机的SN号码

Python爬取与可视化-豆瓣电影数据

引言 在数据科学的学习过程中,数据获取与数据可视化是两项重要的技能。本文将展示如何通过Python爬取豆瓣电影Top250的电影数据,并将这些数据存储到数据库中,随后进行数据分析和可视化展示。这个项目涵盖了从数据抓取、存储到数据可视化的整个…

记一次Linux下Docker镜像服务器磁盘空间清理

我们开发环境Jenkins构建项目时报服务器磁盘空间不足,导致项目自动化构建部署失败, Docker镜像服务器磁盘空间清理我们做了多次了,之前在清理Docker镜像服务器时走了不少弯路,查了不少Docker镜像服务器空间清理,都大同…

JAVA网络编程,反射及注解知识总结

文章目录 网络编程软件架构三要素IP端口号协议UDP协议发送数据接收数据三种通信方式 TCP协议客户端服务器端三次握手四次挥手 反射获取字节码文件获取构造方法获取成员变量获取成员方法反射的作用 动态代理注解作用格式使用位置注解的原理常见注解元注解自定义注解解析注解 网络…

自然语言处理(NLP)—— 语言检测器

1. 文章概述 1.1 目的 在本篇文章中,我们将构建一个语言检测器,这是一个能够识别文本语言的简单分类器。这是一个能够识别文本是用哪种语言写的程序。想象一下,你给这个程序一段文字,它就能告诉你这是英语、法语还是其他语言。 …

Moonshot AI API使用(1)-获取MOONSHOT_API_KEY

Moonshot AI 开放平台 用户注册,使用微信扫码登录 把这个key复制下来

用你熟悉的语言就能开发智能合约,Vara Network 以 WASM 解锁未来应用创新

Vara Network 自推出以来,凭借其基于 Gear Protocol 的独特架构和强大的开发工具,为开发者提供了一个高效、安全的智能合约构建平台。Vara Network 通过采用先进的 Actor 模型、持久内存概念和 WebAssembly 技术,实现了异步消息处理、并行计算…

OpenFeign --学习笔记

什么是OpenFeign? OpenFeign可以想象成一座连接客户端(服务器)和服务器之间的桥梁。在微服务架构中,各个服务之间像小岛屿一样分布在网络上,它们需要相互通信才能协同工作。但是,这些岛屿之间并没有现成的…

SVNCloud 与 Navicat和IDEA的连接

文章目录 SVNCloud 配置Navicat访问云端数据库与IDEA Java jdbc 的连接 SVNCloud 配置 访问网址:SVN注册账号,进入mysql区域: 数据库管理->创建数据库,输入数据库名称和密码,注意,这里的数据库名称实际…

6、后端项目初始化

打开idea后, New Project ,用Maven构建 Spring Boot 项目 点击Next后:先勾选两个基本的依赖,后面再手动添加其它需要的依赖 Spring Web: 表示是一个web应用程序 Lombok:写实体类的时候添加Data注解后就会自动加上g…

Linux网络编程:网络层协议|IP

目录 前言: 1.IP协议 1.1.IP协议格式 1.2.网段划分 1.2.1.知识引入 1.2.2.IP地址划分和子网掩码 1.3.IP地址分类 1.3.1.特殊IP地址 ​编辑 1.3.2.私有IP和公网IP 1.3.3.浅谈NAT技术 1.4.路由 1.4.1.什么是路由 1.4.2.路由表 1.5.网络层数据切片和组装…

MYSQL基础_01_数据库概述

第01章_数据库概述 1. 为什么要使用数据库 持久化(persistence):把数据保存到可掉电式存储设备中以供之后使用。大多数情况下,特别是企业级应用,数据持久化意味着将内存中的数据保存到硬盘上加以”固化”,而持久化的实现过程大多…

三招搞定“找不到msvcp140.dll无法继续执行代码”问题

在计算机使用过程中,我们经常会遇到一些错误提示,其中之一就是“找不到msvcp140.dll”。那么,这个错误提示到底是什么意思呢?又该如何解决这个问题呢?本文将从以下几个方面进行详细阐述。 一,msvcp140.dll文…

如何轻松将Android同步到 PC? 【6个最适合你的方法!】

尽管许多Android手机都配备了充足的数据存储空间,但将手机中的重要数据备份到电脑上始终是明智之举,以防止数据丢失。那么,如何将Android手机与电脑同步呢?虽然大多数Android用户可能会使用USB线或蓝牙传输文件到PC,但…

水电表自动抄表系统

1.简述 水电表自动抄表系统是一种现代化智能化管理系统,它利用先进的物联网,完成了远程控制、即时、零接触的水电表读值收集,大大提升了公共事业服务项目的效率和准确性。该系统不仅减少了人工抄表工作量,还避免了人为失误&#…