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

news2024/11/20 13:27:41

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

大家好,我是Peter~

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

导入库

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

import numpy as np
import pandas as pd

import 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 itertools

from 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 SVC

import numpy as np

import matplotlib.pyplot as plt
import matplotlib.gridspec as gridspec
plt.rcParams['font.sans-serif']=['SimHei'] #用来正常显示中文标签
plt.rcParams['axes.unicode_minus'] = False #用来正常显示负号

import itertools

from 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_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)
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 gridspec

import 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-表示True

array([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]-column
    fig = 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_moons

X, 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 np


X,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 SVC

X, 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.75

plot_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 SVC

X, 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.75

for 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_split

X,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_categorical

from 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/10
    27/27 [==============================] - 0s 7ms/step - loss: 0.9506 - accuracy: 0.6074 - val_loss: 1.0899 - val_accuracy: 0.0000e+00
    Epoch 2/10
    27/27 [==============================] - 0s 2ms/step - loss: 0.7453 - accuracy: 0.6963 - val_loss: 1.0886 - val_accuracy: 0.0000e+00
    Epoch 3/10
    27/27 [==============================] - 0s 1ms/step - loss: 0.6098 - accuracy: 0.7185 - val_loss: 1.0572 - val_accuracy: 0.0000e+00
    Epoch 4/10
    27/27 [==============================] - 0s 2ms/step - loss: 0.5159 - accuracy: 0.7333 - val_loss: 1.0118 - val_accuracy: 0.0000e+00
    Epoch 5/10
    27/27 [==============================] - 0s 1ms/step - loss: 0.4379 - accuracy: 0.7630 - val_loss: 0.9585 - val_accuracy: 0.8000
    Epoch 6/10
    27/27 [==============================] - 0s 2ms/step - loss: 0.3784 - accuracy: 0.8815 - val_loss: 0.8806 - val_accuracy: 0.9333
    Epoch 7/10
    27/27 [==============================] - 0s 1ms/step - loss: 0.3378 - accuracy: 0.9407 - val_loss: 0.8155 - val_accuracy: 1.0000
    Epoch 8/10
    27/27 [==============================] - 0s 2ms/step - loss: 0.3130 - accuracy: 0.9481 - val_loss: 0.7535 - val_accuracy: 1.0000
    Epoch 9/10
    27/27 [==============================] - 0s 2ms/step - loss: 0.2893 - accuracy: 0.9259 - val_loss: 0.6859 - val_accuracy: 1.0000
    Epoch 10/10
    27/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.coloradmin.cn/o/1798741.html

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

相关文章

OpenCV-最小外接圆cv::minEnclosingCircle

作者:翟天保Steven 版权声明:著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处 函数原型 void minEnclosingCircle(InputArray points, Point2f& center, float& radius); 参数说明 InputArray类型的…

22 - 游戏玩法分析 IV(高频 SQL 50 题基础版)

22 - 游戏玩法分析 IV 考点: 聚合函数 # 日期相加 date_add(min(event_date),INTERVAL 1 DAY) select round(count(distinct player_id)/(select count(distinct player_id) from Activity),2) fraction fromActivity where-- 如果日期加一天的数据能在表中…

探索800G数据中心的高速布线解决方案

随着技术的快速进步,数据中心正以前所未有的速度迅速发展。虽然100G和400G数据中心已经普及,但800G数据中心正逐渐流行并展现出增长趋势。由于对高速数据传输的需求呈指数级增长,因此需要高效、可靠的线缆连接解决方案。本文将介绍800G数据中…

Python 机器学习 基础 之 【常用机器学习库】 scikit-learn 机器学习库

Python 机器学习 基础 之 【常用机器学习库】 scikit-learn 机器学习库 目录 Python 机器学习 基础 之 【常用机器学习库】 scikit-learn 机器学习库 一、简单介绍 二、scikit-learn 基础 1、安装 scikit-learn 2、导入 scikit-learn 3、数据准备 4、数据分割 5、训练模…

党史馆3d网上展馆

在数字化浪潮的推动下,华锐视点运用实时互动三维引擎技术,为用户带来前所未有的场景搭建体验。那就是领先于同行业的线上三维云展编辑平台搭建编辑器,具有零基础、低门槛、低成本等特点,让您轻松在数字化世界中搭建真实世界的仿真…

MineAdmin 前端打包后,访问速度慢原因及优化

前言:打包mineadmin-vue前端后,访问速度很慢,打开控制台,发现有一个index-xxx.js文件达7M,加载时间太长; 优化: 一:使用文件压缩(gzip压缩) 1、安装compre…

【乐吾乐3D可视化组态编辑器】数据接入

数据接入 本文为您介绍3D数据接入功能,数据接入功能分为三个步骤:数据订阅、数据集管理、数据绑定 编辑器地址:3D可视化组态 - 乐吾乐Le5le 数据订阅 乐吾乐3D组态数据管理功能由次顶部工具栏中按钮数据管理打开。 在新弹窗中选择数据订阅…

【C/C++】IO流

目录 前言: 一,C语言的I/O流 二,C的I/O流 2-1,C标准IO流 2-2,IO流的连续输入 前言: “流”即是流动的意思,是物质从一处向另一处流动的过程,是对一种有序连续且具有方向性的数据…

【计算机网络】初识IP协议

前言 IP协议,可谓是程序猿必备的基础功之一,这不仅仅是因为IP协议为面试的常客,更是因为IP协议为整个网络协议中最重要、最常被人接触的一种协议。例如IP地址就几乎为所有人所熟知的一种概念,无论是浏览网页、聊天、打游戏&#x…

网络编程: 高级IO与多路转接select,poll,epoll的使用与介绍

网络编程: 高级IO与多路转接select,poll,epoll的使用与介绍 前言一.五种IO模型1.IO的本质2.五种IO模型1.五种IO模型2.同步IO与异步IO3.IO效率 二.非阻塞IO1.系统调用介绍2.验证代码 三.select多路转接1.系统调用接口2.写代码 : 基于select的TCP服务器1.封装的Socket接口2.开始写…

HarmonyOS NEXT星河版之自定义List下拉刷新与加载更多

文章目录 一、加载更多二、下拉刷新三、小结 一、加载更多 借助List的onReachEnd方法,实现加载更多功能,效果如下: Component export struct HPList {// 数据源Prop dataSource: object[] []// 加载更多是否ingState isLoadingMore: bool…

WebGIS常用技术体系记录

1、数据下载 (1)OSM下载开源矢量数据,数据较全,但是质量一般; (2)地理空间数据云下载DEM影像; (3)datav下载行政区 http://datav.aliyun.com/tools/atlas/…

了解Maven,并配置国内源

目录 1.了解Maven 1.1什么是Maven 1.2快速创建一个Maven项⽬ 1.3Maven 核⼼功能 1.3.1项⽬构建 1.3.2依赖管理 1.4Maven Help插件 2.Maven 仓库 2.1中央仓库 2.2本地仓库 3.Maven 设置国内源 1.查看配置⽂件的地址 2.配置国内源 3.设置新项⽬的setting 1.了解Ma…

【iOS】Runtime

文章目录 前言一、Runtime简介二、NSObject库起源isaisa_t结构体cache_t的具体实现class_data_bits_t的具体实现 三、[self class] 与 [super class]四、消息发送与转发五、Runtime应用场景 前言 之前分part学习了Runtime的内容,但是没有系统的总结,这篇…

自然语言处理(NLP)—— 主题建模

1. 主题建模的概念 主题建模(Topic Modeling)是一种用于发现文档集合(语料库)中的主题(或称为主题、议题、概念)的统计模型。在自然语言处理和文本挖掘领域,主题建模是理解和提取大量文本数据隐…

vue-$set修改深层对象的值

背景: 点击编辑按钮,打开修改预算的抽屉,保存后更新此行数据的预算,以前是调接口刷新表格,这次的数据是由前端处理更新,由于数据层级比较深,使用$set来修改两层嵌套对象 使用方法: …

upload-labs-第五关

目录 第五关 1、构造.user.ini文件 2、构造一个一句话木马文件,后缀名为jpg 3、上传.user.ini文件后上传flag.jpg 4、上传成功后访问上传路径 第五关 原理: 这一关采用黑名单的方式进行过滤,不允许上传php、php3、.htaccess等这几类文件…

3D按F3为什么显示不出模型?---模大狮模型网

对于3D建模软件的用户来说,按下F3键通常是用来显示或隐藏模型的功能之一。然而,有时当按下F3键时,却无法正确显示模型,这可能会让用户感到困惑。模大狮将探讨这种情况发生的可能原因以及解决方法,帮助设计师们更好地理…

快速搭建高效运营体系,Xinstall App下载自动绑定助您一臂之力

在互联网的浪潮中,App的推广与运营面临着诸多挑战。如何在多变的互联网环境下迅速搭建起能时刻满足用户需求的运营体系,成为了众多企业关注的焦点。今天,我们就来聊聊如何通过Xinstall的App下载自动绑定功能,轻松解决App推广与运营…

[word] word文档字体间距怎么调整? #其他#经验分享

word文档字体间距怎么调整? 调整word文档字体间距的方法: 打开一个预先写好文字的文档。选中所有文字,点击字体右下角的“更多选项”。 在弹出的“字体”对话框中进入“字符间距”选项卡,在“间距”选项中即可设置字体间距。 设…