机器学习-KNN 算法
一.K-近邻(KNN)
- K-近邻(K-Nearest Neighbors, 简称 KNN)是一种基于实例的学习算法,主要用于分类和回归问题。KNN 的工作原理直观且简单,它基于相似性进行预测,也就是说给定一个新的数据点,KNN 算法会查找距离最近的 K 个数据点,然后通过这些邻居来确定新数据点的类别(在分类任务中)或数值(在回归任务中)。
KNN 的工作原理
-
选择 K 值:
- K 是算法中的一个超参数,表示在做出预测时要参考的最近邻居的数量。常见的取值是 3、5、7 等。
- K 值的选择直接影响模型性能。较小的 K 值使模型对局部噪声更敏感,而较大的 K 值则会使模型过于平滑,可能会错过局部模式。
-
计算距离:
- 常用的距离度量方式是欧几里得距离,也可以使用曼哈顿距离、闵可夫斯基距离等。
- 欧几里得距离公式:
d = ∑ i = 1 n ( x i − y i ) 2 d = \sqrt{\sum_{i=1}^{n} (x_i - y_i)^2} d=i=1∑n(xi−yi)2
其中,x 和 y 是两个数据点, n 是特征的数量。
-
确定最近的 K 个邻居:
- 根据计算得到的距离,选出距离最近的 K 个点作为邻居。
-
分类(对于分类问题):
- 在分类任务中,KNN 通过让 K 个最近邻居中的多数投票来决定新数据点的类别。
- 例如,如果在 K=5 的情况下,有 3 个邻居属于类别 A,2 个属于类别 B,那么预测结果将是类别 A。
-
回归(对于回归问题):
- 在回归任务中,KNN 通过计算 K 个最近邻居的平均值(或加权平均值)来预测新数据点的数值。
KNN 算法的优缺点
优点:
- 简单直观,易于理解和实现。
- 不需要训练阶段,属于“懒惰学习”(Lazy Learning),即模型在训练阶段几乎不做计算,预测时才进行计算。
- 可用于多类别分类问题。
缺点:
- 计算复杂度高:由于在预测时需要计算每个数据点与新数据点的距离,特别是在数据量大时,计算开销较大。
- 对数据的标度敏感:特征的不同标度(如度量单位不同)可能会影响距离计算,因此通常需要对数据进行标准化或归一化。
- 对噪声敏感:K 值较小时,噪声点可能会对结果产生较大影响。
适用场景
- 小数据集:由于 KNN 的计算开销较大,它更适合于小型数据集。
- 多类别分类:KNN 可以很好地处理多类别分类问题。
- 实例具有自然分组的情况:如果数据本身具有天然的分组或簇结构,KNN 能够很好地捕捉这些模式。
KNN 算法的代码示例(分类任务)
下面是一个简单的 KNN 分类任务代码示例:
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.neighbors import KNeighborsClassifier
from sklearn.metrics import accuracy_score# 加载数据集
data = load_iris()
X = data.data
y = data.target# 划分训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)# 初始化KNN分类器,设置K=3
knn = KNeighborsClassifier(n_neighbors=3)# 训练模型
knn.fit(X_train, y_train)# 预测
y_pred = knn.predict(X_test)# 计算准确率
accuracy = accuracy_score(y_test, y_pred)
print(f"模型准确率: {accuracy}")
KNeighborsClassifier 参数详细解释
-
n_neighbors:- 解释: 指定参与投票的最近邻居的数量,即 K 值。
- 类型: 整数。
- 默认值: 5。
- 作用: 决定了模型在分类时会考虑多少个最近邻居。例如,
n_neighbors=3表示将选择距离最近的 3 个样本进行投票。 - 示例:
n_neighbors=3
-
weights:- 解释: 决定如何计算每个邻居的投票权重。常见的选项有:
'uniform': 所有邻居的权重相等。'distance': 根据距离进行加权,距离越近的邻居权重越高。- 自定义函数:可以传入一个用户定义的函数,基于该函数计算权重。
- 类型: 字符串或可调用函数。
- 默认值:
'uniform'。 - 作用: 影响分类决策。如果选择
'distance',那么更近的邻居对分类结果影响更大。 - 示例:
weights='distance'
- 解释: 决定如何计算每个邻居的投票权重。常见的选项有:
-
algorithm:- 解释: 用于计算最近邻居的算法,有以下几种选择:
'auto': 自动选择最合适的算法(根据数据的特征选择)。'ball_tree': 使用 Ball Tree 数据结构,适合高维数据。'kd_tree': 使用 KD Tree 数据结构,适合低维数据。'brute': 直接进行暴力搜索,计算所有点的距离。
- 类型: 字符串。
- 默认值:
'auto'。 - 作用: 控制最近邻居搜索的速度和内存效率,通常建议使用默认的
'auto'选项。 - 示例:
algorithm='kd_tree'
- 解释: 用于计算最近邻居的算法,有以下几种选择:
-
leaf_size:- 解释: 指定 Ball Tree 或 KD Tree 的叶子节点大小,影响树的构建和查询速度。较小的叶子节点通常会带来更快的查询速度,但会消耗更多的内存。
- 类型: 整数。
- 默认值: 30。
- 作用: 在使用
'ball_tree'或'kd_tree'算法时,可以调整该值以优化查询性能。 - 示例:
leaf_size=20
-
p:- 解释: 当使用
minkowski距离度量时,定义了距离公式中的幂指数:- 当
p=1时,使用曼哈顿距离(L1)。 - 当
p=2时,使用欧几里得距离(L2)。
- 当
- 类型: 整数。
- 默认值: 2。
- 作用: 控制距离的计算方式,可以根据数据特性调整该参数。
- 示例:
p=1(使用曼哈顿距离)
- 解释: 当使用
-
metric:- 解释: 指定距离度量的方式。常用选项有:
'minkowski': 闵可夫斯基距离,是欧几里得距离和曼哈顿距离的泛化形式。'euclidean': 欧几里得距离,等同于minkowski距离与p=2的组合。'manhattan': 曼哈顿距离,等同于minkowski距离与p=1的组合。- 其他度量方法如
'chebyshev'或自定义距离函数。
- 类型: 字符串或可调用函数。
- 默认值:
'minkowski'。 - 作用: 控制如何计算样本之间的距离,影响最近邻居的选择。
- 示例:
metric='euclidean'
- 解释: 指定距离度量的方式。常用选项有:
-
metric_params:- 解释: 距离度量函数的附加参数(可选)。如果使用自定义的距离函数,可以通过这个参数传递额外信息。
- 类型: 字典或
None。 - 默认值:
None。 - 作用: 用于在自定义度量函数时,提供额外的控制参数。
- 示例:
metric_params={'w': [1, 2, 3]}(示例自定义权重)
-
n_jobs:- 解释: 用于并行处理最近邻居搜索的线程数量。如果设置为
-1,则使用所有可用的 CPU 核心进行计算。 - 类型: 整数。
- 默认值:
None(使用单个 CPU 核心)。 - 作用: 在大数据集上可以使用多线程加速计算,缩短模型训练和预测时间。
- 示例:
n_jobs=-1
- 解释: 用于并行处理最近邻居搜索的线程数量。如果设置为
二.K-折交叉验证
K-折交叉验证(K-Fold Cross-Validation)是一种常用的模型评估方法,广泛用于机器学习中。它通过将数据集划分为 K 个相同大小的子集(称为“折”),来多次训练和测试模型,从而获得更稳定和可靠的性能评估。
工作原理
-
划分数据集:
- 将整个数据集随机划分成 K 个等大小的子集。每个子集称为一个“折”。
-
训练和验证:
- 在每次迭代中,选择其中一个折作为验证集,剩余的 K-1 个折作为训练集。
- 这个过程会重复 K 次,每次选择不同的折作为验证集,其余折作为训练集。
-
计算平均性能:
- 每次迭代都会得到一个模型的性能度量(如准确率、F1 分数等)。最终将 K 次迭代的性能结果进行平均,得到整体的模型性能。
优点
- 稳定的性能评估: 通过多次迭代,K-折交叉验证减小了模型评估中的随机性,得到的结果更具稳定性。
- 充分利用数据: 每一个样本都在不同的折中被用作训练和验证集,避免了数据浪费。
参数选择
- K 的取值: K 通常取值为 5 或 10,这两种配置在大多数应用中效果较好。较小的 K 值(如 2 或 3)会导致较大的方差,而较大的 K 值(如 20)则增加了计算开销。
- Shuffle(可选): 在划分数据集之前,可以选择对数据进行洗牌(shuffle),以确保每个折的样本分布更随机。
代码示例
下面是一个使用 scikit-learn 实现 K-折交叉验证的示例:
from sklearn.model_selection import KFold
from sklearn.datasets import load_iris
from sklearn.linear_model import LogisticRegression
from sklearn.metrics import accuracy_score
import numpy as np# 加载数据集
data = load_iris()
X = data.data
y = data.target# 初始化K折交叉验证
kf = KFold(n_splits=5, shuffle=True, random_state=42)# 存储每折的准确率
accuracies = []# 执行交叉验证
for train_index, test_index in kf.split(X):X_train, X_test = X[train_index], X[test_index]y_train, y_test = y[train_index], y[test_index]# 初始化并训练模型model = LogisticRegression(max_iter=200)model.fit(X_train, y_train)# 预测并计算准确率y_pred = model.predict(X_test)accuracy = accuracy_score(y_test, y_pred)accuracies.append(accuracy)# 输出结果
print(f"每折的准确率: {accuracies}")
print(f"平均准确率: {np.mean(accuracies)}")
解释
-
KFold(n_splits=5, shuffle=True, random_state=42):n_splits=5指定将数据集划分为 5 个折。shuffle=True表示在分割数据之前打乱数据,以确保每个折的样本分布更加随机。random_state=42确保结果的可重复性。
-
kf.split(X):- 生成训练集和测试集的索引。对于每一折,都会用不同的折作为测试集。
三.分层k-折交叉验证(Stratified k-fold)
StratifiedKFold 参数
-
n_splits:- 解释: 指定将数据集划分成多少个折(子集)。
- 类型: 整数。
- 默认值: 5。
- 示例:
n_splits=5表示数据将被分成 5 个折。
-
shuffle:- 解释: 指定是否在分割之前对数据进行洗牌(打乱顺序)。如果为
True,则在分割数据之前会对数据进行打乱,减少样本顺序对模型评估的影响。 - 类型: 布尔值。
- 默认值:
False。 - 示例:
shuffle=True表示在分割之前打乱数据。
- 解释: 指定是否在分割之前对数据进行洗牌(打乱顺序)。如果为
-
random_state:- 解释: 用于控制随机数生成器的种子,确保结果的可重复性。当
shuffle=True时使用。 - 类型: 整数或
None。 - 默认值:
None。 - 示例:
random_state=42确保在每次运行时数据划分的一致性。
- 解释: 用于控制随机数生成器的种子,确保结果的可重复性。当
-
min_groups(仅在 scikit-learn 版本 0.24 及以后版本中可用):- 解释: 用于指定每个折中样本的最小组数。主要用于对分层 K-折交叉验证的样本量进行控制,确保每一折中至少有指定数量的组。
- 类型: 整数。
- 默认值: 1。
- 示例:
min_groups=5表示每个折中至少包含 5 个组。
使用示例
from sklearn.model_selection import StratifiedKFold
from sklearn.datasets import load_iris
from sklearn.linear_model import LogisticRegression
from sklearn.metrics import accuracy_score
import numpy as np# 加载数据集
data = load_iris()
X = data.data
y = data.target# 初始化分层K折交叉验证
skf = StratifiedKFold(n_splits=5, shuffle=True, random_state=42)# 存储每折的准确率
accuracies = []# 执行交叉验证
for train_index, test_index in skf.split(X, y):X_train, X_test = X[train_index], X[test_index]y_train, y_test = y[train_index], y[test_index]# 初始化并训练模型model = LogisticRegression(max_iter=200)model.fit(X_train, y_train)# 预测并计算准确率y_pred = model.predict(X_test)accuracy = accuracy_score(y_test, y_pred)accuracies.append(accuracy)# 输出结果
print(f"每折的准确率: {accuracies}")
print(f"平均准确率: {np.mean(accuracies)}")
四.模型与加载
在 scikit-learn 中,保存和加载模型通常使用 joblib 或 pickle。joblib 是 scikit-learn 推荐的方式,因为它在处理大型模型(如包含大量数组的模型)时效率更高。
1. 使用 joblib 保存和加载模型
模型保存
import joblib# 保存模型到文件
joblib.dump(knn, 'knn_model.pkl')
模型加载
# 从文件加载模型
loaded_model = joblib.load('knn_model.pkl')# 使用加载的模型进行预测
y_pred = loaded_model.predict(X_test)
2. 使用 pickle 保存和加载模型
模型保存
import pickle# 保存模型到文件
with open('knn_model.pkl', 'wb') as file:pickle.dump(knn, file)
模型加载
# 从文件加载模型
with open('knn_model.pkl', 'rb') as file:loaded_model = pickle.load(file)# 使用加载的模型进行预测
y_pred = loaded_model.predict(X_test)
总结
joblib更适合包含大量数组的模型。pickle适用于一般情况下的模型保存和加载。
五.超参数搜索
- 超参数搜索(Hyperparameter Tuning)是机器学习模型优化的重要步骤。不同的超参数配置会对模型的性能产生显著影响,因此找到最优的超参数组合对于提升模型性能至关重要。
class sklearn.model_selection.GridSearchCV(estimator, param_grid)
说明:
同时进行交叉验证(CV)、和网格搜索(GridSearch),GridSearchCV实计上也是一个估计器(estimator),同时它有几个重要属性:
best_params_ 最佳参数
best_score_ 在训练集中的准确率
best_estimator_ 最佳估计器
cv_results_ 交叉验证过程描述
best_index_最佳k在列表中的下标
完整示例代码
# best_params_ 最佳参数# best_score_ 在训练集中的准确率# best_estimator_ 最佳估计器# cv_results_ 交叉验证过程描述# best_index_最佳k在列表中的下标from sklearn.datasets import load_wine
from sklearn.preprocessing import StandardScaler #标准化
from sklearn.model_selection import train_test_split
from sklearn.neighbors import KNeighborsClassifier #KNN
from sklearn.model_selection import GridSearchCV #超参数GridSearchCV
from sklearn.decomposition import PCA #PCA降维
import pandas as pddata = load_wine()#数据结构
x = pd.DataFrame(data.data,columns=data.feature_names)#标准化
tr = StandardScaler()
x2 = tr.fit_transform(x)#数据结构
data2 = pd.DataFrame(x2,columns=data.feature_names)#PCA降维
transfer1 = PCA(n_components=0.5)
data2 = transfer1.fit_transform(data2)x_train,x_test,y_train,y_test = train_test_split(data2,data.target,test_size=0.2,random_state=33)#创建模型
param = {'n_neighbors':[1,2,3,4,5,6,7,8,9,10]}#knn
model = KNeighborsClassifier()
model = GridSearchCV(model,param)
model.fit(x_train,y_train)#预测
predict = model.predict(x_test)score = model.score(x_test,y_test)print("最佳模型:", model.best_estimator_)
print("最佳参数:\n",model.best_params_)
print("最佳k在列表中的下标:\n",model.best_index_)
print("在训练集中的准确率:\n",model.best_score_)
print("最佳估计器:\n",model.best_estimator_)
print("交叉验证过程描述:\n",model.cv_results_)
总结
best_params_:最优的超参数组合。best_score_:在交叉验证中的最佳平均得分。best_estimator_:使用最佳超参数组合训练的模型。cv_results_:交叉验证过程中所有超参数组合的详细结果。best_index_:最优超参数组合在结果中的索引。
这些属性为你提供了全面的模型优化信息,帮助你选择和评估最佳模型。
实例:葡萄酒–分层k-折交叉验证
from sklearn.datasets import load_wine
from sklearn.neighbors import KNeighborsClassifier
from sklearn.preprocessing import StandardScaler
from sklearn.decomposition import PCA
from sklearn.model_selection import StratifiedKFold
import pandas as pd
import numpy as np
#加载数据
data = load_wine()X = pd.DataFrame(data=data.data,columns=data.feature_names)#标准化
transfer = StandardScaler()
X1 = transfer.fit_transform(X)
X2 = pd.DataFrame(X1,columns=data.feature_names)#降维
transfer1 = PCA(n_components=0.5)
data1 = transfer1.fit_transform(X2)#分层k-折交叉验证Stratified k-fold
skf = StratifiedKFold(n_splits=10,shuffle=True,random_state=2)#储存每折准确率
accuracies = []for train_index,test_index in skf.split(data1,data.target):x_train,x_test = data1[train_index],data1[test_index]y_train,y_test = data.target[train_index],data.target[test_index]#K近邻模型estimator = KNeighborsClassifier(n_neighbors=9)estimator.fit(x_train,y_train)#预测y_predict = estimator.predict(x_test)# print("y_predict:\n",y_test ==y_predict)#计算准确率score = estimator.score(x_test,y_test)accuracies.append(score)print(accuracies)
print(np.mean(accuracies))
实例2 葡萄酒–K-折交叉验证(K-fold)
from sklearn.datasets import load_wine
from sklearn.preprocessing import StandardScaler
from sklearn.model_selection import KFold
from sklearn.neighbors import KNeighborsClassifier
from sklearn.decomposition import PCA
import pandas as pd
import joblibdata = load_wine()x = pd.DataFrame(data.data,columns=data.feature_names)#标准化
sta = StandardScaler()
x1 = sta.fit_transform(x)x2 = pd.DataFrame(x1,columns=data.feature_names)#降维
tra = PCA(n_components=0.6)data1 = tra.fit_transform(x2)kf = KFold(n_splits=10,shuffle=True,random_state=33)
#标准化
accuracies =[]
best_accuracy = 0
best_model = Nonefor train_index,test_index in kf.split(data1,data.target):x_train,x_test = data1[train_index],data1[test_index]y_train,y_test = data.target[train_index],data.target[test_index]#创建模型model = KNeighborsClassifier(n_neighbors=7)model.fit(x_train,y_train)#预测predict = model.predict(x_test)#准确率score = model.score(x_test,y_test)accuracies.append(score)if score > best_accuracy:best_accuracy = scorebest_model = model# print("模型评估率:\n",accuracies)
# print("平均得分:\n",np.mean(accuracies))joblib.dump(best_model,'./src/KNNmodel.pkl')
# 输出结果
print(f"每折的准确率: {accuracies}")
print(f"最高准确率: {best_accuracy}")
实例:mytool 函数的功能
mytool 函数的功能是计算一个文本数据集中每个词的 TF-IDF 值。TF-IDF 是一种常用的文本挖掘方法,用于衡量一个词在文档中的重要性。
import math
from collections import defaultdict def calculate_tfidf(data): total_documents = len(data) word_document_count = defaultdict(int) # 统计每个词在文档中出现的次数 for document in data: unique_words = set(document.split()) for word in unique_words: word_document_count[word] += 1 tfidf_matrix = [] # 计算每个文档的TF-IDF for document in data: word_list = document.split() total_words = len(word_list) tfidf_scores = [] for word in set(word_list): TF = word_list.count(word) / total_words IDF = math.log(total_documents / (1 + word_document_count[word])) tfidf_scores.append(TF * IDF) tfidf_matrix.append(tfidf_scores) return tfidf_matrix # 示例使用
data = ['世界 你好 我 是 华清 远见 的 张三','你好 世界 我 是 李四 世界','华清 远见 666'
] result = calculate_tfidf(data)
print(result)
相关文章:
机器学习-KNN 算法
一.K-近邻(KNN) K-近邻(K-Nearest Neighbors, 简称 KNN)是一种基于实例的学习算法,主要用于分类和回归问题。KNN 的工作原理直观且简单,它基于相似性进行预测,也就是说给定一个新的数据点,KNN 算法会查找距…...
【Linux】如何快速查看 linux 服务器有几个cpu
如何快速查看 linux 服务器有几个cpu author: jayzhen date: 2024.08.22 文章目录 如何快速查看 linux 服务器有几个cpu1. 使用lscpu命令2. 使用nproc命令3. 使用/proc/cpuinfo文件4. 使用top或htop命令结论 在Linux服务器上,你可以通过多种方式快速查看系统中有几个…...
[数据集][目标检测]电力场景轭式悬架锈蚀分类数据集6351张2类别
数据集格式:仅仅包含jpg图片,每个类别文件夹下面存放着对应图片 图片数量(jpg文件个数):6351 分类类别数:2 类别名称[corrosion,good] 每个类别图片数: corrosion 图片数:310 good 图片数:6041 …...
【嵌入式linux开发】智能家居入门5:老版ONENET,多协议接入(QT、微信小程序、HTTP协议、ONENET云平台、旭日x3派)
智能家居入门5(QT、微信小程序、HTTP协议、ONENET云平台、旭日x3派) 前言一、QT界面设计二、云平台产品创建与连接三、下位机端QT代码总览:四、微信小程序端代码总览五、板端测试 前言 前四篇智能家居相关文章都是使用STM32作为主控…...
软考-软件设计师(程序设计语言习题)
💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 非常期待和您一起在这个小…...
「C++系列」vector 容器
前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站:人工智能教程 文章目录 一、vector 容器1. 基本特性2. 基本操作3. 注意事项 二、应用场景1. 应用场景2. 案例案例一࿱…...
梯度的概念
梯度 机器学习中,梯度下降法,牛顿法都会用到梯度概念 对于一元函数,梯度可以看成导数 对于多元函数,梯度可以看成偏导数 如果多元函数包含N个自变量: x 1 , x 2 , . . . , x n x_1, x_2, ..., x_n x1,x2,...,x…...
低代码开发:机遇与挑战并存的技术革新
近年来,随着数字化转型的加速,低代码开发平台如雨后春笋般涌现,承诺让非专业人士也能快速构建应用程序。这种新兴技术正在挑战传统软件开发模式,引发了IT行业的广泛讨论。低代码平台是提高效率的利器,还是降低了编程门…...
Linux之RabbitMQ集群部署
RabbitMQ 消息中间件 1、消息中间件 消息(message): 指在服务之间传送的数据。可以是简单的文本消息,也可以是包含复杂的嵌入对象的消息 消息队列(message queue): 指用来存放消息的队列,一般采用先进先出的队列方式,即最先进入的…...
【JAVA CORE_API】Day19 多线程API(2)、多线程并发安全问题、同步
多线程API 进程和线程 进程:进程就像是一个程序在电脑里运行时的一个实例。你可以把它想象成一个独立的小工人,专门负责完成某项任务(比如打开浏览器、播放音乐)。每个进程都有自己独立的资源(比如内存)和…...
最新Windows 11 23H2精简版,免费获取!稳定流畅!
今日,系统之家小编给大家带来了2024最新的Windows11 23H2精简版系统,该版本系统经过适度地优化与精简,保留大部分功能,完全能满足日常使用需求,兼容性非常出色,无需担心应用程序出现闪退问题。大家可以通过…...
PostgreSQL SELECT 语句:深入解析与实例应用
PostgreSQL SELECT 语句:深入解析与实例应用 PostgreSQL 是一款功能强大的开源关系数据库管理系统,它以稳定性、可靠性以及支持高级功能而著称。在 PostgreSQL 中,SELECT 语句是最基本也是最重要的查询语句之一,用于从数据库表中检索数据。本文将详细介绍 SELECT 语句的用…...
【自然语言处理】 构建文本对话系统
构建文本对话系统的框架如下: 根据聊天系统目的功用的不同,可分成三大类型: 闲聊式机器人:较有代表性的有微软小冰、微软小娜、苹果的 Siri、小 i 机器人等,主要以娱乐为目的。 **知识问答型机器人:**知识…...
java: 程序包org.slf4j不存在
当在Java项目中遇到“程序包org.slf4j不存在”的错误时,这通常意味着你的项目没有正确地包含SLF4J(Simple Logging Facade for Java)的库。SLF4J是一个Java的日志门面(Facade),它允许你在后端使用不同的日志…...
图片转PDF怎么转?教你3种快捷方便的jpg转pdf方法
图片文件以及PDF文档已经是我们工作当中不可或缺的一部分,我们在一些商务合作的场景下经常需要把拍摄下来的合同、企划书、画册等图片内容转换为PDF格式后再发送,这样能够极大程度的保证文件的安全性,那么图片应该如何转换成PDF文件呢?今天来…...
数据防泄密软件如何防止数据泄密?七大措施筑起数据安全壁垒
数据防泄密软件通过集成多种安全防护技术,旨在全面保护企业数据的安全性和保密性。以安企神软件为例,其实现全面防泄密的方式主要包括以下7个方面,为企业筑起数据安全壁垒。 1. 透明加密技术 安企神软件采用先进的透明加密技术,确…...
GNU/Linux - systemd介绍
systemd官网: System and Service Manager systemd systemd Github地址: https://github.com/systemd/systemd 首次发布 2010年3月30日 System and Service Manager systemd 是一套 Linux 系统的基本构件。它提供了一个系统和服务管理器,作为…...
如何理解递归
在二叉树的题目中,我们难免会用到递归方法,递归思想很简单,但运用起来却因为抽象而难以理解。 理解递归的关键在于认识到它是一种解决问题的方法,允许函数直接或间接地调用自身。以下是对递归的概述以及如何理解它的几个要点&…...
Spring Cache sync属性
在Spring Cache中,Cacheable注解用于标记一个方法,使其返回值可以被缓存。sync属性是Spring 4.3引入的一个新特性,用于控制缓存的同步行为。 sync 属性 sync属性的默认值是false,表示异步缓存。如果将sync设置为true,…...
【Unity】通用GM QA工具 运行时数值修改 命令行 测试工具
GM工具使用: GM工具通常用于游戏运行时修改数值(加钱/血量)、解锁关卡等,用于快速无死角测试游戏。一个通用型GM工具对于游戏项目是非常实用且必要的,但通用不能向易用妥协,纯命令行GM门槛太高,对QA不友好。 这类运行时命令行工具…...
微信小程序之bind和catch
这两个呢,都是绑定事件用的,具体使用有些小区别。 官方文档: 事件冒泡处理不同 bind:绑定的事件会向上冒泡,即触发当前组件的事件后,还会继续触发父组件的相同事件。例如,有一个子视图绑定了b…...
Nginx server_name 配置说明
Nginx 是一个高性能的反向代理和负载均衡服务器,其核心配置之一是 server 块中的 server_name 指令。server_name 决定了 Nginx 如何根据客户端请求的 Host 头匹配对应的虚拟主机(Virtual Host)。 1. 简介 Nginx 使用 server_name 指令来确定…...
拉力测试cuda pytorch 把 4070显卡拉满
import torch import timedef stress_test_gpu(matrix_size16384, duration300):"""对GPU进行压力测试,通过持续的矩阵乘法来最大化GPU利用率参数:matrix_size: 矩阵维度大小,增大可提高计算复杂度duration: 测试持续时间(秒&…...
Android 之 kotlin 语言学习笔记三(Kotlin-Java 互操作)
参考官方文档:https://developer.android.google.cn/kotlin/interop?hlzh-cn 一、Java(供 Kotlin 使用) 1、不得使用硬关键字 不要使用 Kotlin 的任何硬关键字作为方法的名称 或字段。允许使用 Kotlin 的软关键字、修饰符关键字和特殊标识…...
优选算法第十二讲:队列 + 宽搜 优先级队列
优选算法第十二讲:队列 宽搜 && 优先级队列 1.N叉树的层序遍历2.二叉树的锯齿型层序遍历3.二叉树最大宽度4.在每个树行中找最大值5.优先级队列 -- 最后一块石头的重量6.数据流中的第K大元素7.前K个高频单词8.数据流的中位数 1.N叉树的层序遍历 2.二叉树的锯…...
推荐 github 项目:GeminiImageApp(图片生成方向,可以做一定的素材)
推荐 github 项目:GeminiImageApp(图片生成方向,可以做一定的素材) 这个项目能干嘛? 使用 gemini 2.0 的 api 和 google 其他的 api 来做衍生处理 简化和优化了文生图和图生图的行为(我的最主要) 并且有一些目标检测和切割(我用不到) 视频和 imagefx 因为没 a…...
A2A JS SDK 完整教程:快速入门指南
目录 什么是 A2A JS SDK?A2A JS 安装与设置A2A JS 核心概念创建你的第一个 A2A JS 代理A2A JS 服务端开发A2A JS 客户端使用A2A JS 高级特性A2A JS 最佳实践A2A JS 故障排除 什么是 A2A JS SDK? A2A JS SDK 是一个专为 JavaScript/TypeScript 开发者设计的强大库ÿ…...
GruntJS-前端自动化任务运行器从入门到实战
Grunt 完全指南:从入门到实战 一、Grunt 是什么? Grunt是一个基于 Node.js 的前端自动化任务运行器,主要用于自动化执行项目开发中重复性高的任务,例如文件压缩、代码编译、语法检查、单元测试、文件合并等。通过配置简洁的任务…...
纯 Java 项目(非 SpringBoot)集成 Mybatis-Plus 和 Mybatis-Plus-Join
纯 Java 项目(非 SpringBoot)集成 Mybatis-Plus 和 Mybatis-Plus-Join 1、依赖1.1、依赖版本1.2、pom.xml 2、代码2.1、SqlSession 构造器2.2、MybatisPlus代码生成器2.3、获取 config.yml 配置2.3.1、config.yml2.3.2、项目配置类 2.4、ftl 模板2.4.1、…...
腾讯云V3签名
想要接入腾讯云的Api,必然先按其文档计算出所要求的签名。 之前也调用过腾讯云的接口,但总是卡在签名这一步,最后放弃选择SDK,这次终于自己代码实现。 可能腾讯云翻新了接口文档,现在阅读起来,清晰了很多&…...
