人才流失预测项目
在本项目中,通过数据科学和AI的方法,分析挖掘人力资源流失问题,并基于机器学习构建解决问题的方法,并且,我们通过对AI模型的反向解释,可以深入理解导致人员流失的主要因素,HR部门也可以根据分析做出正确的决定。
探索性数据分析
##1.数据加载
import pandas as pd
import seaborn as sns
data = pd.read_csv('../data/train.csv')
#分析建模,查看数据情况,1.数据包含数值型和类别型
data
查看数据基本信息
#字段,类型,缺失情况
data.info()
data.info() 来获取数据的信息,包括总行数(样本数)和总列数(字段数)、变量的数据类型、数据集中非缺失的数量以及内存使用情况。
从数据集的信息可以看出,一共有31 个特征,Attrition 是目标字段,23个变量是整数类型变量,8个是对象类型变量。
2.数据基本分析
#数据无缺失值,查看数据分布
data.describe()
跑baseline模型(使用不同的分类算法)
对特征不进行处理
# 选出数值型特征
numerical_feat = data.select_dtypes(include=['int64'])
numerical_feat
# 切分特征和标签
X = numerical_feat.drop(['Attrition'],axis=1)
Y = numerical_feat.Attrition
# 特征幅度缩放
from sklearn.preprocessing import MinMaxScaler
scaler = MinMaxScaler()
x_scaled = scaler.fit_transform(X)
x_scaled = pd.DataFrame(x_scaled, columns=X.columns)
x_scaled
# 第一次跑模型
## 训练集测试集切分
from sklearn.model_selection import train_test_split
from sklearn.model_selection import train_test_split
from sklearn.metrics import roc_auc_score
from sklearn.tree import DecisionTreeClassifier
from sklearn.linear_model import LogisticRegression
from sklearn.ensemble import RandomForestClassifier
from sklearn.ensemble import GradientBoostingClassifier
import xgboost as xgb
import lightgbm as lgbX_train, X_test, Y_train, Y_test = train_test_split(x_scaled,Y,test_size=0.3,random_state=1)
# 决策树
dt_clf = DecisionTreeClassifier()
dt_clf.fit(X_train, Y_train)
dt_auc = roc_auc_score(Y_test, dt_clf.predict_proba(X_test)[:, 1])# 逻辑回归
lr_clf = LogisticRegression()
lr_clf.fit(X_train, Y_train)
lr_auc = roc_auc_score(Y_test, lr_clf.predict_proba(X_test)[:, 1])# 随机森林
rf_clf = RandomForestClassifier()
rf_clf.fit(X_train, Y_train)
rf_auc = roc_auc_score(Y_test, rf_clf.predict_proba(X_test)[:, 1])# 集成学习 - 梯度提升
gb_clf = GradientBoostingClassifier()
gb_clf.fit(X_train, Y_train)
gb_auc = roc_auc_score(Y_test, gb_clf.predict_proba(X_test)[:, 1])#XGBoost
xgb_clf = xgb.XGBClassifier(eval_metric="auc")
xgb_clf.fit(X_train, Y_train)
xgb_auc = roc_auc_score(Y_test, xgb_clf.predict_proba(X_test)[:, 1])#LightGBM
lgb_clf = lgb.LGBMClassifier()
lgb_clf.fit(X_train, Y_train)
lgb_auc = roc_auc_score(Y_test, lgb_clf.predict_proba(X_test)[:, 1])# 打印AUC值
print(f"Decision Tree AUC: {dt_auc}")
print(f"Logistic Regression AUC: {lr_auc}")
print(f"Random Forest AUC: {rf_auc}")
print(f"Gradient Boosting AUC: {gb_auc}")
print(f"XGBoost AUC: {xgb_auc}")
print(f"LightGBM AUC: {lgb_auc}")
3.特征工程
人才流失中,更多的是做特征选择
尝试编码
# 按照出差的频度进行编码
data.BusinessTravel = data.BusinessTravel.replace({'Non-Travel':0,'Travel_Rarely':1,'Travel_Frequently':2})# 性别与overtime编码
data.Gender = data.Gender.replace({'Male':1,'Female':0})
data.OverTime = data.OverTime.replace({'Yes':1,'No':0})
data.Over18 =data.Over18.replace({'Y':1,'N':0})
# 独热向量编码
new_df = pd.get_dummies(data=data,columns=['Department','EducationField','JobRole', 'MaritalStatus'])
new_df# 切分特征和标签
X = new_df.drop(['Attrition'],axis=1)
Y = new_df.Attrition
# 特征幅度缩放
from sklearn.preprocessing import MinMaxScaler
scaler = MinMaxScaler()
x_scaled = scaler.fit_transform(X)
x_scaled = pd.DataFrame(x_scaled, columns=X.columns)
# 决策树
dt_clf = DecisionTreeClassifier()
dt_clf.fit(X_train, Y_train)
dt_auc = roc_auc_score(Y_test, dt_clf.predict_proba(X_test)[:, 1])# 逻辑回归
lr_clf = LogisticRegression()
lr_clf.fit(X_train, Y_train)
lr_auc = roc_auc_score(Y_test, lr_clf.predict_proba(X_test)[:, 1])# 随机森林
rf_clf = RandomForestClassifier()
rf_clf.fit(X_train, Y_train)
rf_auc = roc_auc_score(Y_test, rf_clf.predict_proba(X_test)[:, 1])# 集成学习 - 梯度提升
gb_clf = GradientBoostingClassifier()
gb_clf.fit(X_train, Y_train)
gb_auc = roc_auc_score(Y_test, gb_clf.predict_proba(X_test)[:, 1])#XGBoost
xgb_clf = xgb.XGBClassifier(eval_metric="auc")
xgb_clf.fit(X_train, Y_train)
xgb_auc = roc_auc_score(Y_test, xgb_clf.predict_proba(X_test)[:, 1])#LightGBM
lgb_clf = lgb.LGBMClassifier()
lgb_clf.fit(X_train, Y_train)
lgb_auc = roc_auc_score(Y_test, lgb_clf.predict_proba(X_test)[:, 1])# 打印AUC值
print(f"Decision Tree AUC: {dt_auc}")
print(f"Logistic Regression AUC: {lr_auc}")
print(f"Random Forest AUC: {rf_auc}")
print(f"Gradient Boosting AUC: {gb_auc}")
print(f"XGBoost AUC: {xgb_auc}")
print(f"LightGBM AUC: {lgb_auc}")
并没有明显提高
特征筛选,选出对模型贡献度大的特征
## 训练集测试集切分
from sklearn.model_selection import train_test_split
from sklearn.feature_selection import mutual_info_classif
X_train, X_test, Y_train, Y_test = train_test_split(x_scaled,Y,test_size=0.3,random_state=1)
mutual_info = pd.Series(mutual_info)
mutual_info.index = X_train.columns
mutual_info.sort_values(ascending=False)plt.title("Feature Importance",fontsize=20)
mutual_info.sort_values().plot(kind='barh',figsize=(12,9),color='r')
plt.show()
剔除无效特征(后18位)
sorted_mutual_info = mutual_info.sort_values(ascending=False)
# 获取互信息值最低的18个特征的索引(列名)
least_important_feature_indices = sorted_mutual_info.tail(18).index# 从new_df中删除这些特征
new_df = new_df.drop(columns=least_important_feature_indices)
new_df
# 切分特征和标签
X = new_df.drop(['Attrition'],axis=1)
Y = new_df.Attrition
# 特征幅度缩放
from sklearn.preprocessing import MinMaxScaler
scaler = MinMaxScaler()
x_scaled = scaler.fit_transform(X)
x_scaled = pd.DataFrame(x_scaled, columns=X.columns)
## 训练集测试集切分
from sklearn.model_selection import train_test_split
from sklearn.feature_selection import mutual_info_classif
X_train, X_test, Y_train, Y_test = train_test_split(x_scaled,Y,test_size=0.3,random_state=1)
# 定义模型列表
models = [("Decision Tree", DecisionTreeClassifier()),("Logistic Regression", LogisticRegression()),("Random Forest", RandomForestClassifier()),("Gradient Boosting", GradientBoostingClassifier()),("XGBoost", xgb.XGBClassifier(eval_metric="auc")),("LightGBM", lgb.LGBMClassifier())
]# 训练模型并计算AUC
for name, model in models:model.fit(X_train, Y_train)pred_proba = model.predict_proba(X_test)[:, 1]auc = roc_auc_score(Y_test, pred_proba)print(f"{name} AUC: {auc}")
有了明显提高
做一些SMOTE
# SMOTE处理类别不均衡
from imblearn.over_sampling import SMOTE
sm = SMOTE(sampling_strategy='minority')
x,y = sm.fit_resample(X,Y)
# 过采样之后的比例
sns.countplot(data=new_df,x=y,palette='Set1')
plt.show()
print(y.value_counts())
# 特征幅度缩放
from sklearn.preprocessing import MinMaxScaler
scaler = MinMaxScaler()
x_scaled = scaler.fit_transform(x)
x_scaled = pd.DataFrame(x_scaled, columns=x.columns)## 训练集测试集切分
from sklearn.model_selection import train_test_split
from sklearn.feature_selection import mutual_info_classif
X_train, X_test, Y_train, Y_test = train_test_split(x_scaled,y,test_size=0.3,random_state=1)
# 定义模型列表
models = [("Decision Tree", DecisionTreeClassifier()),("Logistic Regression", LogisticRegression()),("Random Forest", RandomForestClassifier()),("Gradient Boosting", GradientBoostingClassifier()),("XGBoost", xgb.XGBClassifier(eval_metric="auc")),("LightGBM", lgb.LGBMClassifier())
]# 训练模型并计算AUC
for name, model in models:model.fit(X_train, Y_train)pred_proba = model.predict_proba(X_test)[:, 1]auc = roc_auc_score(Y_test, pred_proba)print(f"{name} AUC: {auc}")
模型有了大幅度提高
LOF
from pyod.models.lof import LOF
train = new_df.copy()
val = new_df.copy()
#创建LOF对象
clf = LOF(n_neighbors=20, algorithm='auto')
# 切分特征和标签
X = train.drop(['Attrition'],axis=1)#无监督学习算法,因此没有y,不需要传入y
clf.fit(X)#模型预测
train['out_pred'] = clf.predict_proba(X)[:,1]
#随机给的一个93%分数数的一个参考值(93%是随便给的,不宜太小)
#判断依据:只要小于93%分位数的值,就说明这个样本是正常数据,如果大于93%分位数的值,则说明是异常数据
key = train['out_pred'].quantile(0.93)
# 'Attrition' 是目标变量列,我们不想将其包括在特征列表中
excluded_columns = ['Attrition']
# 获取所有列名,并将排除列从列表中移除
feature_lst = [col for col in new_df.columns.tolist() if col not in excluded_columns]
#获取用于模型训练的特征列
x = train[train['out_pred'] < key][feature_lst]
y = train[train['out_pred'] < key]['Attrition']#准备验证集的x和y
x =train[feature_lst]
y = train['Attrition']
val_x = val[feature_lst]
val_y = val['Attrition']
#模型训练
lr_model = LogisticRegression(C=0.1,class_weight='balanced')
lr_model.fit(x,y)
from sklearn.metrics import roc_curve#模型预测和画图
y_pred = lr_model.predict_proba(x)[:,1]
fpr_lr_train,tpr_lr_train,_ = roc_curve(y,y_pred)
train_ks = abs(fpr_lr_train - tpr_lr_train).max()
print('train_ks : ',train_ks)y_pred = lr_model.predict_proba(val_x)[:,1]
fpr_lr,tpr_lr,_ = roc_curve(val_y,y_pred)
val_ks = abs(fpr_lr - tpr_lr).max()
print('val_ks : ',val_ks)from matplotlib import pyplot as plt
plt.plot(fpr_lr_train,tpr_lr_train,label = 'train LR')
plt.plot(fpr_lr,tpr_lr,label = 'evl LR')
plt.plot([0,1],[0,1],'k--')
plt.xlabel('False positive rate')
plt.ylabel('True positive rate')
plt.title('ROC Curve')
plt.legend(loc = 'best')
plt.show()
交叉验证和超参数调优
- 网格搜索:模型针对具有一定范围值的超参数网格进行评估,尝试参数值的每种组合,并实验以找到最佳超参数,计算成本很高。
- 随机搜索:这种方法评估模型的超参数值的随机组合以找到最佳参数,计算成本低于网格搜索。
from sklearn.metrics import roc_auc_score
from sklearn.model_selection import cross_val_score# 定义模型列表
models = [("Decision Tree", DecisionTreeClassifier()),("Logistic Regression", LogisticRegression()),("Random Forest", RandomForestClassifier()),("Gradient Boosting", GradientBoostingClassifier()),("XGBoost", xgb.XGBClassifier(eval_metric="auc")),("LightGBM", lgb.LGBMClassifier())
]# X_train, Y_train, X_test, Y_test是已经准备好的数据集
# X_scaled是经过标准化的特征数据集# 训练模型并计算AUC
for name, model in models:model.fit(X_train, Y_train)pred_proba = model.predict_proba(X_test)[:, 1]auc = roc_auc_score(Y_test, pred_proba)print(f"{name} AUC: {auc}")# 使用交叉验证查看得分
for name, model in models:print("******", name, "******")cv_scores = cross_val_score(model, x_scaled, y, cv=5, scoring='roc_auc') # 使用roc_auc作为评分标准cv_mean = cv_scores.mean()print(f"Cross-validated AUC mean score: {cv_mean}")
from sklearn.model_selection import GridSearchCV
from sklearn.metrics import make_scorer, roc_auc_score# 定义模型列表
models = [("Decision Tree", DecisionTreeClassifier(), {'max_depth': [3, 5, 10]}),("Logistic Regression", LogisticRegression(), {'C': [0.1, 1, 10]}),("Random Forest", RandomForestClassifier(), {'n_estimators': [10, 50, 100]}),("Gradient Boosting", GradientBoostingClassifier(), {'n_estimators': [50, 100, 200]}),("XGBoost", xgb.XGBClassifier(eval_metric="auc"), {'n_estimators': [50, 100, 200]}),("LightGBM", lgb.LGBMClassifier(), {'n_estimators': [50, 100, 200]})
]# 使用网格搜索进行交叉验证
for name, model, params in models:print(f"Grid searching {name}...")grid_search = GridSearchCV(model, param_grid=params, cv=5, scoring='roc_auc')grid_search.fit(X_scaled, y)print(f"Best parameters for {name}: {grid_search.best_params_}")print(f"Cross-validated AUC mean score for {name}: {grid_search.best_score_}")
相关文章:
![](https://i-blog.csdnimg.cn/direct/62c88548d70b4013bf1f9668a8d07bc9.png)
人才流失预测项目
在本项目中,通过数据科学和AI的方法,分析挖掘人力资源流失问题,并基于机器学习构建解决问题的方法,并且,我们通过对AI模型的反向解释,可以深入理解导致人员流失的主要因素,HR部门也可以根据分析…...
![](https://i-blog.csdnimg.cn/direct/9156ed4423524e5ea519f8c4a67292a4.png)
BUG——imx6u开发_结构体导致的死机问题(未解决)
简介: 最近在做imx6u的linux下裸机驱动开发,由于是学习的初级阶段,既没有现成的IDE可以使用,也没有GDB等在线调试工具,只能把代码烧写在SD卡上再反复插拔,仅靠卑微的亮灯来判断程序死在哪一步。 至于没有使…...
![](https://www.ngui.cc/images/no-images.jpg)
问答:什么是对称密钥、非对称密钥,http怎样变成https的?
文章目录 对称密钥 vs 非对称密钥HTTP 变成 HTTPS 的过程 对称密钥 vs 非对称密钥 1. 对称密钥加密 定义: 对称密钥加密是一种加密算法,其中加密和解密使用的是同一个密钥。特点: 速度快: 因为只使用一个密钥,所以加密和解密速度较快。密钥分发问题: 双…...
![](https://i-blog.csdnimg.cn/direct/503a6235e74545f2a1642f51cbfeecd3.jpeg)
虚拟滚动列表组件ReVirtualList
虚拟滚动列表组件ReVirtualList 组件实现基于 Vue3 Element Plus Typescript,同时引用 vueUse lodash-es tailwindCss (不影响功能,可忽略) 在 ReList 的基础上,增加虚拟列表功能,在固定高度的基础上,可以优化大数…...
![](https://img-blog.csdnimg.cn/img_convert/791fbded99bfe0127c00aa56d462869f.jpeg)
稳定、耐用、美观 一探究竟六角头螺钉螺栓如何选择
在机器与技术未被发现的过去,紧固件设计和品质并不稳定。但是,他们已成为当今许多行业无处不在的构成部分。六角头标准件或六角头标准件是紧固件中持续的头部设计之一,它有六个面,对广泛工业应用大有益处。六角头标准件或常分成六…...
![](https://i-blog.csdnimg.cn/direct/21360692a6b14b17becc04daeaee24a1.png)
数据库Mybatis基础操作
目录 基础操作 删除 预编译SQL 增、改、查 自动封装 基础操作 环境准备 删除 根据主键动态删除数据:使用了mybatis中的参数占位符#{ },里面是传进去的参数。 单元测试: 另外,这个方法是有返回值的,返回这次操作…...
![](https://i-blog.csdnimg.cn/direct/12b1241c21414346a4bccaea46485f3b.png)
人物形象设计:塑造独特角色的指南
引言 人物形象设计是一种创意过程,它利用强大的设计工具,通过视觉和叙述元素塑造角色的外在特征和内在性格。这种设计不仅赋予角色以生命,还帮助观众或读者在心理层面上与角色建立联系。人物形象设计的重要性在于它能够增强故事的吸引力和说…...
![](https://i-blog.csdnimg.cn/direct/eefcbf721a704444962b6e66a414fcd1.png#pic_center)
网络安全-安全策略初认识
文章目录 前言理论介绍1. 安全策略1.1 定义:1.2 关键术语: 2. 防火墙状态监测 实战步骤1:实验环境搭建步骤2:配置实现 总结1. 默认安全策略2. 自定义安全策略3. 防火墙状态会话表 前言 who:本文主要写给入门防火墙的技…...
![](https://www.ngui.cc/images/no-images.jpg)
python import相对导入与绝对导入
文章目录 相对导入与绝对导入绝对导入相对导入何时使用相对导入何时使用绝对导入示例 相对导入与绝对导入 在Python中,from .file_manager import SomeFunction 和 from file_manager import SomeFunction 两种导入方式看似相似,但在模块寻找机制上存在…...
![](https://www.ngui.cc/images/no-images.jpg)
深入理解 Go 语言原子内存操作
原子内存操作提供了实现其他同步原语所需的低级基础。一般来说,你可以用互斥体和通道替换并发算法的所有原子操作。然而,它们是有趣且有时令人困惑的结构,应该深入了解它们是如何工作的。如果你能够谨慎地使用它们,那么它们完全可以成为代码优化的好工具,而不会增加复杂性…...
![](https://www.ngui.cc/images/no-images.jpg)
PostgreSQL几个扩展可以帮助实现数据的分词和快速查询
在 PostgreSQL 数据库中,有几个扩展可以帮助实现数据的分词和快速查询,特别是在处理全文搜索和文本分析时。以下是几个常用的扩展: 1. pg_trgm pg_trgm(Trigram)扩展是 PostgreSQL 中的一个强大的工具,它可以通过计算字符串之间的相似度来实现快速文本搜索。它支持基于…...
![](https://i-blog.csdnimg.cn/direct/38b6df093a684c9195b7442400ec187f.webp)
C盘满了怎么办?教你清理C盘的20个大招,值得收藏备用
C盘满了怎么办?教你清理C盘的20个大招,值得收藏备用 今天给大家介绍20种C盘清理的方法,下次遇到C盘满了红了就知道怎么做了,喜欢请点赞收藏关注点评。 清理更新缓存 清理微信缓存 查找大文件清理或者迁移 磁盘缓存清理 系统还…...
![](https://i-blog.csdnimg.cn/direct/820533631e7d4457ba288f35baeb327c.png)
原生js实现下滑到当前模块进度条填充
<div style"height: 1500px;"></div> <div class"progress-container"><div class"progress-bar" data-progress"90%"><p class"progress-text">Google Ads在Google搜索引擎上覆盖超过90%的互…...
![](https://i-blog.csdnimg.cn/direct/7dcfd158e2c74963a00457973e1f7eb5.png#pic_center)
显示弹出式窗口的方法
文章目录 1. 概念介绍2. 使用方法3. 示例代码 我们在上一章回中介绍了Sliver综合示例相关的内容,本章回中将介绍PopupMenuButton组件.闲话休提,让我们一起Talk Flutter吧。 1. 概念介绍 我们在本章回中介绍的PopupMenuButton组件位于AppBar右侧…...
![](https://www.ngui.cc/images/no-images.jpg)
Java-什么是缓存线程池?
什么是缓存线程池? 缓存线程池 (CachedThreadPool) 是一种特殊的线程池,它能够动态地调整线程的数量,以适应任 务的需求。这种线程池非常适合处理大量短暂的任务,因为它会根据任务的数量自动增加或减少线 程的数量。 缓存线程池的特点: 线程数量动态调整:缓存线程池…...
![](https://www.ngui.cc/images/no-images.jpg)
esbuild中的Binary Loader:处理二进制文件
在前端或Node.js项目中,有时需要处理二进制文件,如图片、音频、视频或其他非文本资源。esbuild提供了一款名为Binary Loader的插件,它能够在构建时将二进制文件加载为二进制缓冲区,并使用Base64编码将其嵌入到打包文件中。在运行时…...
![](https://img-blog.csdnimg.cn/img_convert/188d1d90a2ad90c740bc0ac26c534966.webp?x-oss-process=image/format,png)
深度好文:从《黑神话:悟空》看未来游戏趋势:高互动性、个性化与全球化
引言 在数字时代的浪潮中,游戏产业以其独特的魅力和无限的可能性,成为了全球娱乐文化的重要组成部分。随着科技的飞速发展,特别是高性能计算和人工智能技术的突破,游戏的世界变得越来越真实、细腻且富有深度。而在这股技术洪流中…...
![](https://i-blog.csdnimg.cn/direct/b0b5d7df7b3c4b0ab79cac11ea3d2405.png)
【中项第三版】系统集成项目管理工程师 | 第 12 章 执行过程组
前言 本章属于10大管理的内容,上午题预计会考8-10分,下午案例分析也会进行考查。学习要以教材为主。 目录 12.1 指导与管理项目工作 12.1.1 主要输入 12.1.2 主要输出 12.2 管理项目知识 12.2.1 主要输入 12.2.2 主要输出 12.3 管理质量 12.3.…...
![](https://www.ngui.cc/images/no-images.jpg)
C语言自动生成宏定义枚举类型和字符串
#include <stdio.h>// 定义错误枚举 #define ERROR_LIST(e) \e(SUCCESS) \e(FAILURE) \e(NOT_FOUND) \e(TIMEOUT)// 使用宏生成枚举 #define GENERATE_ENUM(ENUM) ENUM, typedef enum {ERROR_LIST(GENERATE_ENUM) } ErrorCode;// 使用宏生成字符串数组…...
![](https://www.ngui.cc/images/no-images.jpg)
C#单例模式
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks;namespace _3._3._6_单例模式 {public class Singleton{private static Singleton s_instance;private int _state;private Singleton(int …...
![](https://i-blog.csdnimg.cn/direct/7322d8321b2d475e8f11777bbf7a60e0.png)
10-使用sentinel流控
本文介绍sentinel的直接流控的使用。 0、环境 jdk 1.8sentinel 1.8.2springboot 2.4.2 1、sentinel环境搭建 从官方发布的网站上下载: sentinel Jar,下载对应版本。 下载完成后,进入刚才下载的Jar文件所在的目录,执行如下命令:…...
![](https://i-blog.csdnimg.cn/direct/4482af8505a44620bb814d7130da2613.png)
redis AOF机制
在redis运行期间,不断将redis执行的写命令写到文件中,redis重启之后,只要将这些命令重复执行一遍就可以恢复数据。因为AOF只是将少量的写命令写入AOF文件中,因此其执行效率高于RDB,开启AOF即使Redis发生故障࿰…...
![](https://img-blog.csdnimg.cn/img_convert/9f50fe3959ecf79bf7812b3bf7278a7e.png)
Day 21代码|随想录| 二叉树完结撒花,今日刷题669.修剪二叉搜索树、108.将有序数组转换为二叉搜索树、538.吧二叉搜索树转换为累加树
提示:DDU,供自己复习使用。欢迎大家前来讨论~ 文章目录 二叉树 Part06二、题目题目一:669.修剪二叉搜索树解题思路:递归法迭代法: 题目二: 108.将有序数组转换为二叉搜索树解题思路递归法:迭代…...
![](https://www.ngui.cc/images/no-images.jpg)
cmake教程一
1. Start 1.1 构建简单工程 cmake_minimum_required(VERSION 3.0) project(Step1) add_executable(Step1 main.cpp)设置cmake最低版本要求设置工程名字设置工程生成可执行程序 2. 声明 C Standard set(CMAKE_CXX_STANDARD 11) set(CMAKE_CXX_STANDARD_REQUIRED True)如果我…...
![](https://i-blog.csdnimg.cn/direct/6e0ecdbb0d4e4981bcf8f5b70649de4d.png#pic_center)
3D场景标注标签信息,three.js CSS 2D渲染器CSS2DRenderer、CSS 3D渲染器CSS3DRenderer(结合react)
如果你想用HTML元素作为标签标注三维场景中模型信息,需要考虑定位的问题。比如一个模型,在代码中你可以知道它的局部坐标或世界坐标xyz,但是你并不知道渲染后在canvas画布上位置,距离web页面顶部top和左侧的像素px值。自己写代码把…...
![](https://www.ngui.cc/images/no-images.jpg)
C++参悟-单例模式
单例模式 一、概述1. 特点2. 实现方式3. 应用场景 二、实现代码1. 静态局部变量的懒汉单例2. 加锁的懒汉式单例3. 使用 C11 中的 std::call_one 的懒汉单例4. 饿汉式单例 一、概述 这里记录一下单例模式的最常用使用,单例模式(Single Pattern࿰…...
![](https://i-blog.csdnimg.cn/direct/06a56f672d92401c96bfe04a638a23eb.png)
【题解】—— LeetCode一周小结32
🌟欢迎来到 我的博客 —— 探索技术的无限可能! 🌟博客的简介(文章目录) 【题解】—— 每日一道题目栏 上接:【题解】—— LeetCode一周小结31 5.不含连续1的非负整数 题目链接:600. 不含连续…...
![](https://img-blog.csdnimg.cn/img_convert/c3bd1ab9f5227f39c655193d2076ec90.jpeg)
详解线索分层的目的、维度与创新实践
线索分层是一个系统性的过程,旨在更有效地管理、跟踪和利用线索资源。这一过程可以借鉴多种策略和方法,特别是在用户运营和市场营销中。 1、线索分层的目的 线索分层的主要目的是根据线索的不同特征或成熟度,将其分类管理,以便更…...
![](https://www.ngui.cc/images/no-images.jpg)
于8月21号的回顾
傍晚的日落和逐渐深邃的夜,驱散了白天的极致闷热。倦怠和疲惫充斥着大脑,喧嚣的浮沉又在耳边轰鸣。 我不曾想到,再次打开博客已经是两年后的今天了。手指轻轻滑过鼠标,博客的页面缓缓加载,那些被时间尘封的记忆瞬间涌…...
![](https://www.ngui.cc/images/no-images.jpg)
Abstract Class抽象类
抽象类(Abstract Class)在面向对象编程中是一种特殊的类,它不能被实例化,即不能创建该类的对象。抽象类主要用于定义一组接口(即方法),这些方法的具体实现由子类来完成。抽象类通常用于表示一种…...
![](/images/no-images.jpg)
辽宁省人民政府网站官网/营销策划推广公司
在我们用pl/sql的Tools导出用户对象时,例如导出一个表,则导出的t_test.sql的前几行如下: spool test.log prompt prompt Creating table t_test prompt prompt 这里的prompt的作用相当于一般的操作系统命令echo,输出后面的信…...
![](https://img-blog.csdnimg.cn/fc312230fc424428a3ed52e705e1a56d.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQ2MTYyMzIx,size_16,color_FFFFFF,t_70)
asp.net网站怎么做/网页制作工具
一、Docker架构 Docker 包括三个基本概念: 镜像(Image):Docker 镜像(Image),就相当于是一个 root 文件系统。比如官方镜像 ubuntu:16.04 就包含了完整的一套 Ubuntu16.04 最小系统的 root 文件系统。 容器…...
![](/images/no-images.jpg)
bontop外贸建站公司怎么样/全国互联网营销大赛官网
精品文档精品文档腿膇葿膆莁薀莅艿蚄薈荿蚃薃PAGEPAGE13精品文档PAGE备份一体机测试方案WORD格式.可编写目录目录2第一章:测试环境配置31.1测试环境组网图31.2硬件与软件配置.3第二章测试方法42.1测试策略.42.2结果描绘.42.3用例列表.5第三章测试步骤以及评测记录.5…...
![](/images/no-images.jpg)
手机百度怎么解除禁止访问网站/百度排名点击软件
1、ubuntu adsl设置 sudo pppoeconf 2、解决有线无法边接 dashhome/system setting/network。显示Wired Unmanaged 解决方法:sudo vim /etc/NetworkManager/NetworkManager.conf将managedfalse改成managedtrue然后重启network-managersudo service network-manag…...
![](https://img-blog.csdnimg.cn/63dd34039b684148ad526f7d267962ad.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAVGVzdGVyaG9tZWU=,size_20,color_FFFFFF,t_70,g_se,x_16#pic_center)
商城网站模板源码/网络视频营销的案例
本文由5t5发表于TesterHome社区网站,点击原文链接可与作者直接交流。 本次帖子单刀直入,直接说点,谨慎查阅。 兼容性存在的意义 很简单,就是为了把覆盖普及大众的机型上项目暴露出来的问题全部扼杀掉,有效的改善/避免…...
![](/images/no-images.jpg)
辽阳做网站公司/淘宝指数查询
https://www.aswifter.com/2015/06/14/gitlab-with-docker/ (seperate redis, mysql, backup and restore) Docker 官方镜像列表 https://hub.docker.com/explore/部署 GitLab 获取 GitLab 镜像 docker pull gitlab/gitlab-ce:8.0.5-ce.0 查看本地镜像 # docker images REPOS…...