基于传统机器学习模型算法的项目开发详细过程

1 场景分析

1.1 项目背景

描述开发项目模型的一系列情境和因素,包括问题、需求、机会、市场环境、竞争情况等

1.2. 解决问题

传统机器学习在解决实际问题中主要分为两类:

  • 有监督学习:已知输入、输出之间的关系而进行的学习,从而产生一个能够对已知输入给出合适输出的模型。这些算法在图像分类、语音识别、自然语言处理、推荐系统等领域有着广泛的应用
  • 无监督学习:已知输入,无输出结果而进行的学习,发现数据中的潜在特征和规律而训练的模型。这些算法在数据挖掘、图像处理、自然语言处理等领域有着广泛的应用

传统机器学习达到的目的主要分为两类

  • 分析影响结果的主要因素
  • 充分必要条件下预测结果

传统机器学习算法在实际开发中主要分两类

  • 基于树的算法
  • 非基于树的算法

2 数据整体情况

2.1 数据加载

数据分析3剑客:numpy pandas matplotlib

# 导入相关包
import os
import numpy as np
import pandas as pd
import warnings
warnings.filterwarnings('ignore')
pd.set_option('display.max_rows', None)
import matplotlib.pyplot as plt
import matplotlib
matplotlib.style.use('ggplot')
import seaborn as sns
import plotly.express as px
from sklearn import preprocessing
from sklearn.preprocessing import LabelEncoder
import holoviews as hv
from holoviews import opts
hv.extension('bokeh')

1、 pandas读取数据: pd.read_csv(),训练数据一般从csv文件加载。读取数据返回DataFrame,df.head() 查看前5条件数据分布

# 读取数据
df = pd.read_csv('./xxx.csv')
df.head()

在这里插入图片描述

2、查看数据总体信息

df.info() 

在这里插入图片描述
3、 查看数据描述

# 数据总数、平均值、标准差、最大最小值,25% 50% 75% 分位值
df.describe().T 

在这里插入图片描述

4、统计数据空值

df.isnull().sum() 

在这里插入图片描述
5、 查看数据形状

df.shape

在这里插入图片描述
6、查看数据类型

df.dtypes

在这里插入图片描述

2.2 样本是否均衡

如果正、负样本不均衡怎么做?

  • 大样本变少——下采样
  • 小样本变多——上采样
  • 实际应用中,上采样较多,将真实的数据做重复冗余

2.3 数据分析

以下为案例:

2.3.1单因分析

  • 绘制直方图
fig = px.histogram(df, x='列名', hover_data=df.columns, title='XXX分布', barmode='group')
fig.show()

在这里插入图片描述

fig = px.histogram(df, x='TPC_LIP', color='TPC_LIP', hover_data=df.columns, title='罐盖分布', barmode='group')
fig.show()

在这里插入图片描述

  • 绘制分布图
hv.Distribution(np.round(df['列名'])).opts(title='标题', color='green', xlabel='x轴标签名', ylabel='y轴标签名')\
.opts(opts.Distribution(width=1000, height=600, tools=['hover'], show_grid=True))

在这里插入图片描述

hv.Distribution(df['BF_IRON_DUR']).opts(title='XXX时长', color='red', xlabel='时长(秒)', ylabel='Destiny')\
.opts(opts.Distribution(width=1000, height=600, tools=['hover'], show_grid=True))

在这里插入图片描述

2.3.2 多因分析

  • 绘制直方图
temp_agg = df.groupby('OUTER_TEMPERATURE').agg({'TEMPERATURE': ['min', 'max']})
temp_maxmin = pd.merge(temp_agg['TEMPERATURE']['max'],temp_agg['TEMPERATURE']['min'],right_index=True,left_index=True)
temp_maxmin = pd.melt(temp_maxmin.reset_index(), ['OUTER_TEMPERATURE']).rename(columns={'OUTER_TEMPERATURE':'OUTER_TEMPERATURE', 'variable':'Max/Min'})
hv.Bars(temp_maxmin, ['OUTER_TEMPERATURE', 'Max/Min'], 'value').opts(title="Temperature by OUTER_TEMPERATURE Max/Min", ylabel="TEMPERATURE")\.opts(opts.Bars(width=1000, height=700,tools=['hover'],show_grid=True))

在这里插入图片描述

  • 寻找特征偏态(skewness)和核密度估计(Kernel density estimate KDE)
plt.figure(figsize=(15,10))
for i,col in enumerate(df.columns, 1):plt.subplot(5,3,i)plt.title(f"Distribution of {col} Data")sns.histplot(df[col],kde=True)plt.tight_layout()plt.plot()

在这里插入图片描述

  • 绘制曲线图
iron_temp = df['IRON_TEMPERATURE'].iloc[:300]temp = df['TEMPERATURE'].iloc[:300](hv.Curve(iron_temp, label='XXX') * hv.Curve(temp, label='XXX')).opts(title="XXXX温度对比", ylabel="IRON_TEMPERATURE", xlabel='TEMPERATURE')\.opts(opts.Curve(width=1500, height=500,tools=['hover'], show_grid=True))

在这里插入图片描述

3 数据处理

3.1 数据清洗

3.1.1离群值

利用箱形图找出离群值并可过滤剔除

Minimum 最小值
First quartile 1/4分位值
Median 中间值
Third quartile 3/4分位值
Maximum 最大值

  • XXX离群值1

在这里插入图片描述

  • XXX离群值2
fig = px.box(df, y='XXX', title='XXXXX')
fig.show()

在这里插入图片描述

3.1.2空数据处理

如果数据量比较大,查出空数据的行或列删除即可,反之要珍惜现有的数据样本

可采用以下两种方法进行补全

  • 随机森林补全
# 引入随机森林模型
from sklearn.ensemble import RandomForestRegressor
# 随机森林模型
rfr = RandomForestRegressor(random_state=None, n_estimators=500, n_jobs=-1)
# 利用已知输入和输出数据进行模型训练
rfr.fit(known_X, known_y)
# 输出模型得分
score = rfr.score(known_X, known_y)
print('模型得分', score)
# 获得缺失的特征数据X预测并补全
unknown_predict = rfr.predict(unKnown_X)
  • 简单归类补全
# 引入简单归类包
from sklearn.impute import SimpleImputer
# 对缺失的列进行平均值补全
imputer = SimpleImputer(missing_values=np.nan, strategy='mean')
# 进行模型训练
imputer = imputer.fit_transform(df[['TEMPERATURE']])
# 输出训练结果
imputer

在这里插入图片描述

3.2 特征工程

特征衍生、选择、缩放、分布、重要性

  • 特征衍生: 特征转换和特征组合

    特征转换——单特征自己进行变换,例如取绝对值、进行幂函数变换等
    特征组合——多特征之间组合变换,如四则运算、交叉组合、分组统计等

3.2.1 特征选择

corr相关性系数,删除相关性强、冗余的特征,对分析特征权重很重要

# 浅颜色代表正相关 深颜色代表负相关
plt.figure(figsize=(16, 16))
sns.heatmap(df.corr(), cmap='BrBG', annot=True, linewidths=.5)
_ = plt.xticks(rotation=45)

在这里插入图片描述

3.2.2 特征缩放

  • 受特征缩放的影响:距离算法 KNN K-means SVM 等

在这里插入图片描述

  • 不受特征缩放的影响:基于树的算法
    在这里插入图片描述

缩放方法

  • 归一化
    最大、最小值 0~1 之间,适合非高斯分布 K-Nearest Neighbors and Neural Networks
    在这里插入图片描述

  • 标准化
    适合高斯分布,但也可不是高斯分布。平均值为0,标准差为1,即使有异常值不受影响
    在这里插入图片描述

  • Robust Scaler(鲁棒缩放)
    计算上下四分位数(Q1和Q3)之间的差值,每个数据点减去下四分位数(Q1),再除以四分位数范围(Q3-Q1)

# data
x = pd.DataFrame({# Distribution with lower outliers'x1': np.concatenate([np.random.normal(20, 2, 1000), np.random.normal(1, 2, 25)]),# Distribution with higher outliers'x2': np.concatenate([np.random.normal(30, 2, 1000), np.random.normal(50, 2, 25)]),
})
np.random.normalscaler = preprocessing.RobustScaler()
robust_df = scaler.fit_transform(x)
robust_df = pd.DataFrame(robust_df, columns =['x1', 'x2'])scaler = preprocessing.StandardScaler()
standard_df = scaler.fit_transform(x)
standard_df = pd.DataFrame(standard_df, columns =['x1', 'x2'])scaler = preprocessing.MinMaxScaler()
minmax_df = scaler.fit_transform(x)
minmax_df = pd.DataFrame(minmax_df, columns =['x1', 'x2'])fig, (ax1, ax2, ax3, ax4) = plt.subplots(ncols = 4, figsize =(20, 5))
ax1.set_title('Before Scaling')sns.kdeplot(x['x1'], ax = ax1, color ='r')
sns.kdeplot(x['x2'], ax = ax1, color ='b')
ax2.set_title('After Robust Scaling')sns.kdeplot(robust_df['x1'], ax = ax2, color ='red')
sns.kdeplot(robust_df['x2'], ax = ax2, color ='blue')
ax3.set_title('After Standard Scaling')sns.kdeplot(standard_df['x1'], ax = ax3, color ='black')
sns.kdeplot(standard_df['x2'], ax = ax3, color ='g')
ax4.set_title('After Min-Max Scaling')sns.kdeplot(minmax_df['x1'], ax = ax4, color ='black')
sns.kdeplot(minmax_df['x2'], ax = ax4, color ='g')
plt.show()

在这里插入图片描述

3.2.3 类别特征处理

  • 非基于树的算法最好的方式——独热编码
# 独热编码
feature_col_nontree = ['TPC_AGE','TPC_LID','BF_START_WAITING', 'BF_IRON_DUR', 'BF_END_WAITING', 'BF_RAIL_DUR', 'RAIL_STEEL_DUR', 'EMPTY_START_WAITING', 'EMPTY_DUR', 'EMPTY_END_WAITING', 'STEEL_RAIL_DUR', 'RAIL_BF_DUR','TOTAL_TIME','OUTER_TEMPERATURE']
fullSel=pd.get_dummies(feature_col_nontree)

在这里插入图片描述

  • 基于树的算法最好的方式——标签编码
df_tree = df.apply(LabelEncoder().fit_transform)
df_tree.head()

3.2.4 特征重要性

注意:只有在特征没有冗余或被拆分的情况下,分析特征的重要性才有意义

from sklearn.ensemble import RandomForestClassifierclf = RandomForestClassifier()
clf.fit(X, y)
clf.feature_importances_
plt.rcParams['figure.figsize'] = (12, 6)
plt.style.use('fivethirtyeight')feature = list(X.columns)importances = clf.feature_importances_
feat_name = np.array(feature)
index = np.argsort(importances)[::-1]plt.bar(range(len(index)), importances[index], color='lightblue')
plt.step(range(15), np.cumsum(importances[index]))
_ = plt.xticks(range(15), labels=feat_name[index], rotation='vertical', fontsize=14)

在这里插入图片描述

4 构建模型

4.1 数据拆分

训练数据80% 测试数据20%
训练数据80% 在分80%为训练数据,20%为验证数据

from sklearn.model_selection import train_test_split
X = df.drop('TEMPERATURE', axis=1)
y = df['TEMPERATURE']
X_train_all, X_test, y_train_all,  y_test = train_test_split(X, y, test_size=0.2)
X_train, X_valid, y_train, y_valid = train_test_split(X_train_all, y_train_all, test_size=0.2)
print(X_train.shape, y_train.shape)
print(X_test.shape, y_test.shape)
print(X_valid.shape, y_valid.shape)

在这里插入图片描述

4.2 选用算法

非基于树的算法

  • LinearRegression
  • LogisticRegression
  • Naive Bayes
  • SVM
  • KNN
  • K-Means

基于树的算法

  • Decission Trees
  • Extra Trees
  • Random Forest
  • XGBoost
  • GBM
  • LightGBM

4.2 数据交叉验证

  • k-fold cross-validation:
    k个不相交的子集,其中一个子集作为测试集,其余的子集作为训练集。重复k次
  • stratified k-fold cross-validation (样本分布不均匀情况下使用)
    在这里插入图片描述

4.3 算法比较优选

# 导入机器学习 线性回归为例
from sklearn.ensemble import RandomForestRegressor, GradientBoostingRegressor, ExtraTreesRegressor
from sklearn.discriminant_analysis import LinearDiscriminantAnalysis
from sklearn.linear_model import LinearRegression
from sklearn.neighbors import KNeighborsRegressor
from sklearn.tree import DecisionTreeRegressor
from sklearn.svm import SVR
from xgboost import XGBRegressor
from sklearn.model_selection import GridSearchCV, cross_val_score, StratifiedKFold# 设置kfold 交叉采样法拆分数据集
kfold = StratifiedKFold(n_splits=10)# 汇总不同模型算法
regressors = []
regressors.append(SVR())
regressors.append(DecisionTreeRegressor())
regressors.append(RandomForestRegressor())
regressors.append(ExtraTreesRegressor())
regressors.append(GradientBoostingRegressor())
regressors.append(KNeighborsRegressor())
regressors.append(LinearRegression())
regressors.append(LinearDiscriminantAnalysis())
regressors.append(XGBRegressor())# 不同机器学习交叉验证结果汇总
cv_results = []
for regressor in regressors:cv_results.append(cross_val_score(estimator=regressor, X=X_train, y=y_train, scoring='neg_mean_squared_error', cv=kfold, n_jobs=-1))# 求出模型得分的均值和标准差
cv_means = []
cv_std = []for cv_result in cv_results:cv_means.append(cv_result.mean())cv_std.append(cv_result.std())# 汇总数据
cvResDf = pd.DataFrame({'cv_mean': cv_means,'cv_std': cv_std,'algorithm':['SVC','DecisionTreeReg','RandomForestReg','ExtraTreesReg','GradientBoostingReg','KNN','LR','LDA', 'XGB']})
cvResDf

在这里插入图片描述

bar = sns.barplot(data=cvResDf.sort_values(by='cv_mean', ascending=False),x='cv_mean', y='algorithm', **{'xerr': cv_std})
bar.set(xlim=(0.7, 0.9))

在这里插入图片描述

4.3 深度学习效果

tesorflow

import keras
d_model = keras.models.Sequential()
d_model.add(keras.layers.Dense(units=256, activation='relu', input_shape=(X_train_scaler.shape[1:])))
d_model.add(keras.layers.Dense(units=128, activation='relu'))
d_model.add(keras.layers.Dense(units=1))out_put_dir = './'
if not os.path.exists(out_put_dir):os.mkdir(out_put_dir)
out_put_file = os.path.join(out_put_dir, 'model.keras')callbacks = [keras.callbacks.TensorBoard(out_put_dir),keras.callbacks.ModelCheckpoint(out_put_file, save_best_only=True, save_weights_only=True),keras.callbacks.EarlyStopping(patience=5, min_delta=1e-3)
]d_model.compile(optimizer='Adam', loss='mean_squared_error', metrics=['mse'])
history = d_model.fit(X_train_scaler, y_train, epochs=100, validation_data=(X_valid_scaler, y_valid), callbacks=callbacks)

在这里插入图片描述

pytorch

import pandas as pd
import torch
from torch import nndata = pd.read_csv('XXX.csv', header=None)
print(data.head())
X = data.iloc[:, :-1]
print(X.shape)
Y = data.iloc[:, -1]
Y.replace(-1, 0, inplace=True)
print(Y.value_counts())
X = torch.from_numpy(X.values).type(torch.FloatTensor)
Y = torch.from_numpy(Y.values.reshape(-1, 1)).type(torch.FloatTensor)
model = nn.Sequential(nn.Linear(15, 1),nn.Sigmoid()
)
print(model)loss_fn = nn.BCELoss()
opt = torch.optim.SGD(model.parameters(), lr=0.0001)
batch_size = 32
steps = X.shape[0] // batch_size
for epoch in range(1000):for batch in range(steps):start = batch * batch_sizeend = start + batch_sizex = X[start:end]y = Y[start:end]y_pred = model(x)loss = loss_fn(y_pred, y)opt.zero_grad()loss.backward()opt.step()print(model.state_dict())accuracy = ((model(X).data.numpy() > 0.5) == Y.numpy()).mean()
print('accuracy = ', accuracy)

在这里插入图片描述

5 模型优化

选出相对表现优秀的模型进行优化,经过调参和工程反复应用情况,选择最优模型

5.1 网络搜索

  • DecisionTreeRegressor模型
#DecisionTreeRegressor模型
GTR = DecisionTreeRegressor()
gb_param_grid = {'criterion': ['squared_error', 'friedman_mse', 'absolute_error', 'poisson'],'splitter': ['best', 'random'],'max_depth': [4, 8],'min_samples_leaf': [100,150],'max_features': [0.3, 0.1] }
modelgsGTR = GridSearchCV(GTR,param_grid = gb_param_grid, cv=kfold, scoring="neg_mean_squared_error", n_jobs= -1, verbose = 1)
modelgsGTR.fit(X_train,y_train)
modelgsGTR.best_score_
  • xgboost
import xgboost as xgbparams = {'objective':'reg:linear','booster':'gbtree','eta':0.03,'max_depth':10,'subsample':0.9,'colsample_bytree':0.7,'silent':1,'seed':10}
num_boost_round = 6000
dtrain = xgb.DMatrix(X_train, y_train)
dtest = xgb.DMatrix(X_test, y_test)evals = [(dtrain, 'train'), (dtest, 'validation')]gbm = xgb.train(params, # 模型参数dtrain, # 训练数据num_boost_round, # 轮次,决策树的个数evals=evals, # 验证,评估的数据early_stopping_rounds=100, # 在验证集上,当连续n次迭代,分数没有提高后,提前终止训练verbose_eval=True) # 打印输出log日志,每次训练详情

5.2 正则化

在这里插入图片描述
作用:

  1. 抵制w无限增大,防止溢出
  2. 减少训练集与测试集之间的结果差异,防止过拟合
  3. 或多或少影响训练集的效果

L2使得所有w均变小
L1使得最不重要的特征维度变小,增强泛化能力,也起到降维的作用。L1在实际应用中较多。

6 模型评估

在这里插入图片描述

  • Accuracy 准确率:模型预测正确结果所占的比例,容易受到正负样本不平衡时影响
    在这里插入图片描述

  • Precision 精确率:模型预测为正样本占实际正样本的比例,容易受到所选阈值的影响。希望事务精准发生,对精确率要求相对较高(比如推送广告)
    在这里插入图片描述

  • Recall 召回率:正样本占所有模型预测为正样本的比例,容易受到所选阈值的影响。希望负面或不好的事务不发生,对召回率要求相对较高(比如投送涉及黄、赌、毒的内容文章)
    在这里插入图片描述

  • F1 score (F1):模型精确率和召回率的一种加权平均,它的最大值是1,最小值是0
    在这里插入图片描述

  • ROC/AUC (Receiver Operating characteristic 接收者操作特征曲线, Area Under Carve 曲线下面积)
    ROC的曲线由所有阈值点theta组成,其下面积越大说明分类效果越好

在这里插入图片描述

thresholds = [0.1,0.2,0.3,0.4,0.5,0.6,0.7,0.8,0.9]
recalls = [] # 召回率
precisions = [] # 精确度
aucs = [] # 曲线下面积
y_pred_proba = grid_search.predict_proba(X_test)
for threshold in thresholds:y_ = y_pred_proba[:,1] >= thresholdcm = confusion_matrix(y_test,y_)# TP/(TP + FN)recalls.append(cm[1,1]/(cm[1,0] + cm[1,1])) # 召回率# TP/(TP + FP)precisions.append(cm[1,1]/(cm[0,1] + cm[1,1])) # 精确率fpr,tpr,_ = roc_curve(y_test,y_)auc_ = auc(fpr,tpr)aucs.append(auc_)plt.figure(figsize=(12,6))
plt.plot(thresholds,recalls,label = 'Recall')
plt.plot(thresholds,aucs,label = 'auc')
plt.plot(thresholds,precisions,label = 'precision')
plt.legend()
plt.xlabel('thresholds')

在这里插入图片描述

  • Log loss 损失函数

    • 线性回归(MES 均方误差)
      Log Loss = - 1.0 ( target log(prediction) + (1 - target) * log(1 - prediction) )
    • 逻辑回归(交叉熵)
      在这里插入图片描述
      在这里插入图片描述

请尊重别人的劳动成果 转载请务必注明出处

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

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

相关文章

导航相关知识梳理

接下来轮到了专业知识---》android知识--》通用的知识 导航相关的知识整理开始了,应该是要一个星期差不多的。每天加一点 百度地图,高德地图,百度地图相关的虽然比较全面,每个模块都有了解,毕竟自己带了多个相关项目…

【Dart】=> [04] Dart初体验-基础语法(流程控制-if-switch-case-for循环

目录 基础语法-流程控制if 语句补充:三元运算符switch – case 语句switch – case 语句for 循环计算购物车中被选中商品的总金额 基础语法-流程控制 学习内容: if 语句switch – case 语句for 循环语句 if 语句 if 语句让代码有选择的执行&#xff…

二叉树DFS

基础知识 二叉树遍历 二叉搜索树BST 二叉树三种深度遍历 LeetCode 94. 二叉树的中序遍历 class Solution {public List<Integer> inorderTraversal(TreeNode root) {List<Integer> ans new ArrayList<>();inorder(root, ans);return ans;}public void in…

JAVA JNA调用动态链接库

1.JAVA 中pom坐标的引入 <dependency><groupId>net.java.dev.jna</groupId><artifactId>jna-platform</artifactId><version>5.2.0</version></dependency> 2.首先根据系统判断动态连接库的调用的类型 String os this.syste…

Pod的控制器

Pod的控制器是什么&#xff1f; pod控制器&#xff1a;工作负载均衡。workload。用于管理pod的中间层。确保pod资源符合预期的状态。 预期状态&#xff1a; 副本数 容器的重启策略 镜像拉取策略 pod出现故障时的重启等等 Pod控制器的类型 1、 replicaSet&#xff1a;指…

NLP论文阅读记录 - WOS | 2023 TxLASM:一种新颖的与语言无关的文本文档摘要模型

文章目录 前言0、论文摘要一、Introduction1.1目标问题1.2相关的尝试1.3本文贡献 二.文献综述及相关工作三.本文方法四 实验效果4.1数据集4.2 对比模型4.3实施细节4.4评估指标4.5 实验结果4.6 细粒度分析 五 总结思考 前言 TxLASM: A novel language agnostic summarization mo…

用了这8个 Python 数据挖掘工具包,生产力明显得到了提升!

在进行数据科学时&#xff0c;可能会浪费大量时间编码并等待计算机运行某些东西。所以我选择了一些 Python 库&#xff0c;可以帮助你节省宝贵的时间。 喜欢记得收藏、关注、点赞&#xff0c;文末送技术交流和资料 1、Optuna Optuna 是一个开源的超参数优化框架&#xff0c;…

ArkTS中自定义组件

ArkTS中自定义组件 一、组件位置二、Hello.ets自定义组件自定义组件 三、Second.ets父组件 一、组件位置 一个项目下所有的自定义的组件名不可以重复&#xff0c;无论是否在一个ets文件中 二、Hello.ets自定义组件 自定义组件 1&#xff1a;组件必须使用Component装饰 2&#…

stable-diffusion-webui的逐步部署教程

大家好,我是爱编程的喵喵。双985硕士毕业,现担任全栈工程师一职,热衷于将数据思维应用到工作与生活中。从事机器学习以及相关的前后端开发工作。曾在阿里云、科大讯飞、CCF等比赛获得多次Top名次。现为CSDN博客专家、人工智能领域优质创作者。喜欢通过博客创作的方式对所学的…

IIC学习之SHT30温湿度传感器(基于STM32)

简介 附上SHT30资料和逻辑分析仪源文件&#xff0c;点击下载 关于IIC的介绍网上已经非常详尽&#xff0c;这里只说重点&#xff1a; 双线&#xff08;SDA&#xff0c;SCL&#xff09;&#xff0c;半双工采用主从结构&#xff0c;支持一主多从&#xff0c;通过地址寻址&#…

USB转串口芯片 国产GP232RL 低成本兼容替代FT232RL 数据手册资料参考

随着工业物联网的不断发展&#xff0c;USB接口正在逐渐替代老式电脑的各种低俗外围接口&#xff0c;然而目前的工业环境中&#xff0c;许多重要的设备仍然使用RS232、RS422、RS485接口界面设计&#xff0c;因此许多用户使用USB转RS232、RS422、RS485转换器或者是转换线&#xf…

Overmind平台推出Sui任务,帮助开发者学习Move并构建强大的应用程序

Overmind与Sui基金会合作&#xff0c;推出了其首个任务系列&#xff0c;旨在帮助开发者学习Move并开始在Sui上构建。这些任务通过提供赢取奖励的机会来将学习体验变成游戏&#xff0c;激励开发者构建高质量的代码并向Sui社区展示他们的技能。 去年推出的Overmind平台正在扩展到…

从零学算法46

46.给定一个不含重复数字的数组 nums &#xff0c;返回其 所有可能的全排列 。你可以 按任意顺序 返回答案。 示例 1&#xff1a; 输入&#xff1a;nums [1,2,3] 输出&#xff1a;[[1,2,3],[1,3,2],[2,1,3],[2,3,1],[3,1,2],[3,2,1]] 示例 2&#xff1a; 输入&#xff1a;nums…

Leetcode20-唯一摩尔斯密码词(804)

1、题目 国际摩尔斯密码定义一种标准编码方式&#xff0c;将每个字母对应于一个由一系列点和短线组成的字符串&#xff0c; 比如: ‘a’ 对应 “.-” &#xff0c; ‘b’ 对应 “-…” &#xff0c; ‘c’ 对应 “-.-.” &#xff0c;以此类推。 为了方便&#xff0c;所有 26…

new mars3d.graphic.PolylineEntity({在固定高度开启编辑模式的坐标自定义处理

功能示例(Vue版) | Mars3D三维可视化平台 | 火星科技 问题场景&#xff1a; 1.在编辑航线时&#xff0c;需要指定航线坐标在固定高度值上开启编辑模式。 2.关键代码是&#xff1a; graphicLayer.startEditing({开启编辑模式&#xff0c;进行航线的编辑。 解决方案&#xf…

大模型实战营Day4 XTuner 大模型单卡低成本微调实战 作业

按照文档操作&#xff1a; 单卡跑完训练&#xff1a; 按照要求更改微调的数据&#xff1a; 完成微调数据的脚本生成&#xff1a; 修改配置文件&#xff1a; 替换好文件后启动&#xff1a; 启动后终端如图&#xff1a; 用于微调的一些数据显示&#xff1a; 训练时间&#x…

Gd-DOTA-NH2与DOTA-NH2:特点与应用的对比讨论

在生物医学领域&#xff0c;配体化学的重要性日益凸显。其中&#xff0c;Gd-DOTA-NH2和DOTA-NH2就是两种常见的配体&#xff0c;它们在磁共振成像&#xff08;MRI&#xff09;中具有应用。然而&#xff0c;这两种配体的化学结构存在差异&#xff0c;因此它们的应用范围和特性也…

muduo网络库剖析——套接字Socket类

muduo网络库剖析——套接字Socket类 前情从muduo到my_muduo 概要socket网络编程socket编程接口介绍头文件socketbindlistenacceptaccept4connect 框架与细节成员函数使用方法 源码结尾 前情 从muduo到my_muduo 作为一个宏大的、功能健全的muduo库&#xff0c;考虑的肯定是众多…

数字孪生+人工智能突破复杂地形和气候提供可靠的电力

利用 Bentley 应用程序实现数字化交付&#xff0c;大大缩短了项目时间和成本&#xff0c;降低了碳排放量 Kalpataru Projects International Limited (KPIL) 正在扩展喀麦隆的电力网络&#xff0c;以改善该国 13% 人口的电网连接和电力供应。根据其项目管理方法&#xff0c;KPI…

Oracle 实战手册 工作实战经验总结

一、基本的数据库管理 高级开发人员需要掌握&#xff0c;了解Oracle数据库运行的基本原理&#xff0c;了解其中的概念。 1、数据库的启动和关闭 2、如何确定Oracle的版本&#xff1f; SQL> select * from v$version 2 / BANNER -------------------------------------…