【人工智能】项目案例分析:使用自动编码器进行信用卡欺诈检测
一、项目背景
信用卡欺诈是金融行业面临的一个重要问题,快速且准确的欺诈检测对于保护消费者和金融机构的利益至关重要。本项目旨在通过利用自动编码器(Autoencoder)这一无监督学习算法,来检测信用卡交易中的欺诈行为,特别适合于异常检测任务,因为它能够学习正常数据的分布,并通过重构误差来识别异常数据。
二、项目概述
目标:构建一个自动编码器模型,用于检测信用卡交易数据中的潜在欺诈行为。
数据集:我们将使用一个公开的信用卡欺诈数据集,该数据集已经被预处理过,包括标准化的特征和一个指示是否为欺诈交易的目标变量。
技术栈:
- 编程语言:Python
- 数据分析库:Pandas
- 数据可视化库:Matplotlib
- 机器学习库:TensorFlow/Keras
三、架构设计
- 数据准备:加载数据集,进行初步的数据探索和预处理。
- 模型构建:定义自动编码器模型,包括编码器和解码器部分。
- 模型训练:使用正常交易数据训练自动编码器。
- 异常检测:通过计算重构误差来识别潜在的欺诈交易。
- 结果评估:使用常见的评估指标来评估模型的性能。
四、示例代码
首先,我们需要安装必要的库:
pip install tensorflow pandas matplotlib
接下来,让我们开始编写代码:
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import tensorflow as tf
from tensorflow.keras.models import Model
from tensorflow.keras.layers import Input, Dense
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
from sklearn.metrics import confusion_matrix, classification_report# 读取数据
def load_data(file_path):data = pd.read_csv(file_path)return data# 数据预处理
def preprocess_data(data):# 分离特征和标签X = data.drop('Class', axis=1)y = data['Class']# 标准化特征scaler = StandardScaler()X_scaled = scaler.fit_transform(X)return X_scaled, y# 构建自动编码器模型
def build_autoencoder(input_dim):input_layer = Input(shape=(input_dim,))# 编码器encoded = Dense(128, activation='relu')(input_layer)encoded = Dense(64, activation='relu')(encoded)encoded = Dense(32, activation='relu')(encoded)# 解码器decoded = Dense(64, activation='relu')(encoded)decoded = Dense(128, activation='relu')(decoded)decoded = Dense(input_dim, activation='linear')(decoded)autoencoder = Model(inputs=input_layer, outputs=decoded)autoencoder.compile(optimizer='adam', loss='mse')encoder = Model(inputs=input_layer, outputs=encoded)return autoencoder, encoder# 训练模型
def train_model(autoencoder, X_train, epochs=100, batch_size=32):autoencoder.fit(X_train, X_train,epochs=epochs,batch_size=batch_size,shuffle=True,validation_split=0.2,verbose=1)# 异常检测
def detect_anomalies(autoencoder, X_test):# 使用自动编码器进行重构reconstructions = autoencoder.predict(X_test)# 计算重构误差reconstruction_errors = np.mean(np.power(X_test - reconstructions, 2), axis=1)return reconstruction_errors# 可视化结果
def plot_results(reconstruction_errors, threshold, y_true):plt.figure(figsize=(10, 6))plt.hist(reconstruction_errors, bins=50, color='blue', alpha=0.6, label='Reconstruction Errors')plt.axvline(threshold, color='red', linestyle='--', linewidth=2, label=f'Threshold: {threshold:.2f}')plt.xlabel('Reconstruction Error')plt.ylabel('Count')plt.legend()plt.show()# 主函数
if __name__ == '__main__':file_path = 'creditcard.csv' # 假设这是信用卡欺诈数据集的路径data = load_data(file_path)# 数据预处理X_scaled, y = preprocess_data(data)# 划分训练集和测试集X_train, X_test, y_train, y_test = train_test_split(X_scaled, y, test_size=0.2, random_state=42)# 构建自动编码器模型input_dim = X_train.shape[1]autoencoder, encoder = build_autoencoder(input_dim)# 训练模型train_model(autoencoder, X_train)# 异常检测reconstruction_errors = detect_anomalies(autoencoder, X_test)# 设置阈值threshold = np.percentile(reconstruction_errors, 95)# 评估结果y_pred = (reconstruction_errors > threshold).astype(int)print("Confusion Matrix:")print(confusion_matrix(y_test, y_pred))print("Classification Report:")print(classification_report(y_test, y_pred))# 可视化结果plot_results(reconstruction_errors, threshold, y_test)
五、注意事项
- 数据集:确保你使用的数据集已经被适当预处理过,包括标准化特征等。
- 模型架构:自动编码器的架构可以根据具体情况调整,例如层数和节点数量。
- 阈值选择:选择合适的阈值非常重要,可以通过观察重构误差的分布来确定一个合理的阈值。
- 评估指标:由于欺诈检测是一个不平衡分类问题,因此除了混淆矩阵外,还可以使用精确率、召回率和F1分数等指标来评估模型性能。
六、扩展和完善项目
在现有代码的基础上,我们可以进一步扩展和完善项目,包括以下方面:
- 数据探索与可视化:更好地理解数据集的特征分布。
- 模型调优:通过超参数调优来提高模型性能。
- 异常检测阈值的确定:使用更系统的方法来确定异常检测的阈值。
- 模型评估:使用多种评估指标来全面评估模型性能。
- 结果可视化:更详细的可视化结果,包括混淆矩阵和ROC曲线等。
1.示例代码
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
import tensorflow as tf
from tensorflow.keras.models import Model
from tensorflow.keras.layers import Input, Dense
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
from sklearn.metrics import confusion_matrix, classification_report, roc_auc_score, roc_curve, precision_recall_curve
from sklearn.model_selection import GridSearchCV
from tensorflow.keras.wrappers.scikit_learn import KerasClassifier# 读取数据
def load_data(file_path):data = pd.read_csv(file_path)return data# 数据探索
def explore_data(data):# 查看数据集的基本统计信息print(data.describe())# 查看数据集中各特征的相关性correlation_matrix = data.corr()plt.figure(figsize=(10, 8))sns.heatmap(correlation_matrix, annot=True, cmap='coolwarm')plt.title('Correlation Matrix')plt.show()# 数据预处理
def preprocess_data(data):# 分离特征和标签X = data.drop('Class', axis=1)y = data['Class']# 标准化特征scaler = StandardScaler()X_scaled = scaler.fit_transform(X)return X_scaled, y# 构建自动编码器模型
def build_autoencoder(input_dim, hidden_units=[128, 64, 32]):input_layer = Input(shape=(input_dim,))# 编码器encoded = Dense(hidden_units[0], activation='relu')(input_layer)encoded = Dense(hidden_units[1], activation='relu')(encoded)encoded = Dense(hidden_units[2], activation='relu')(encoded)# 解码器decoded = Dense(hidden_units[1], activation='relu')(encoded)decoded = Dense(hidden_units[0], activation='relu')(decoded)decoded = Dense(input_dim, activation='linear')(decoded)autoencoder = Model(inputs=input_layer, outputs=decoded)autoencoder.compile(optimizer='adam', loss='mse')encoder = Model(inputs=input_layer, outputs=encoded)return autoencoder, encoder# 超参数调优
def tune_hyperparameters(X_train, y_train):def create_model(hidden_units=[128, 64, 32]):input_dim = X_train.shape[1]autoencoder, _ = build_autoencoder(input_dim, hidden_units)return autoencoderparam_grid = {'hidden_units': [[128, 64, 32], [128, 64, 16]],'batch_size': [32, 64],'epochs': [100, 150]}model = KerasClassifier(build_fn=create_model, verbose=0)grid = GridSearchCV(estimator=model, param_grid=param_grid, cv=3, scoring='neg_mean_squared_error')grid_result = grid.fit(X_train, X_train)print("Best: %f using %s" % (grid_result.best_score_, grid_result.best_params_))means = grid_result.cv_results_['mean_test_score']stds = grid_result.cv_results_['std_test_score']params = grid_result.cv_results_['params']for mean, stdev, param in zip(means, stds, params):print("%f (%f) with: %r" % (mean, stdev, param))return grid_result.best_params_# 训练模型
def train_model(autoencoder, X_train, epochs=100, batch_size=32):autoencoder.fit(X_train, X_train,epochs=epochs,batch_size=batch_size,shuffle=True,validation_split=0.2,verbose=1)# 异常检测
def detect_anomalies(autoencoder, X_test):# 使用自动编码器进行重构reconstructions = autoencoder.predict(X_test)# 计算重构误差reconstruction_errors = np.mean(np.power(X_test - reconstructions, 2), axis=1)return reconstruction_errors# 确定异常检测阈值
def determine_threshold(reconstruction_errors, y_test):precision, recall, thresholds = precision_recall_curve(y_test, reconstruction_errors)f1_scores = 2 * (precision * recall) / (precision + recall)f1_scores = np.nan_to_num(f1_scores)best_threshold_index = np.argmax(f1_scores)best_threshold = thresholds[best_threshold_index]return best_threshold# 可视化结果
def plot_results(reconstruction_errors, threshold, y_test):plt.figure(figsize=(10, 6))plt.hist(reconstruction_errors, bins=50, color='blue', alpha=0.6, label='Reconstruction Errors')plt.axvline(threshold, color='red', linestyle='--', linewidth=2, label=f'Threshold: {threshold:.2f}')plt.xlabel('Reconstruction Error')plt.ylabel('Count')plt.legend()plt.show()# 绘制混淆矩阵y_pred = (reconstruction_errors > threshold).astype(int)cm = confusion_matrix(y_test, y_pred)plt.figure(figsize=(6, 6))sns.heatmap(cm, annot=True, fmt='d', cmap='Blues', xticklabels=['Normal', 'Fraud'], yticklabels=['Normal', 'Fraud'])plt.xlabel('Predicted')plt.ylabel('True')plt.title('Confusion Matrix')plt.show()# 绘制ROC曲线fpr, tpr, _ = roc_curve(y_test, reconstruction_errors)auc = roc_auc_score(y_test, reconstruction_errors)plt.figure(figsize=(6, 6))plt.plot(fpr, tpr, label=f'ROC curve (AUC = {auc:.2f})')plt.plot([0, 1], [0, 1], 'k--')plt.xlim([0.0, 1.0])plt.ylim([0.0, 1.05])plt.xlabel('False Positive Rate')plt.ylabel('True Positive Rate')plt.title('Receiver Operating Characteristic')plt.legend(loc="lower right")plt.show()# 主函数
if __name__ == '__main__':file_path = 'creditcard.csv' # 假设这是信用卡欺诈数据集的路径data = load_data(file_path)# 数据探索explore_data(data)# 数据预处理X_scaled, y = preprocess_data(data)# 划分训练集和测试集X_train, X_test, y_train, y_test = train_test_split(X_scaled, y, test_size=0.2, random_state=42)# 超参数调优best_params = tune_hyperparameters(X_train, y_train)# 构建自动编码器模型input_dim = X_train.shape[1]autoencoder, encoder = build_autoencoder(input_dim, hidden_units=best_params['hidden_units'])# 训练模型train_model(autoencoder, X_train, epochs=best_params['epochs'], batch_size=best_params['batch_size'])# 异常检测reconstruction_errors = detect_anomalies(autoencoder, X_test)# 确定阈值threshold = determine_threshold(reconstruction_errors, y_test)# 评估结果y_pred = (reconstruction_errors > threshold).astype(int)print("Confusion Matrix:")print(confusion_matrix(y_test, y_pred))print("Classification Report:")print(classification_report(y_test, y_pred))# 可视化结果plot_results(reconstruction_errors, threshold, y_test)
2.新增功能说明
- 数据探索与可视化:通过统计描述和相关性热力图来更好地理解数据集的特征分布。
- 模型调优:使用
GridSearchCV
进行超参数调优,寻找最优的隐藏层单元数、批次大小和训练轮次。 - 异常检测阈值的确定:通过计算F1分数来确定最优的异常检测阈值。
- 模型评估:使用混淆矩阵、分类报告、ROC曲线和AUC值等多种评估指标来全面评估模型性能。
- 结果可视化:增加了混淆矩阵和ROC曲线的可视化。
3.注意事项
- 数据集:确保你使用的数据集已经被适当预处理过,包括标准化特征等。
- 模型架构:自动编码器的架构可以根据具体情况调整,例如层数和节点数量。
- 阈值选择:通过计算F1分数来确定最优阈值,这种方法可以平衡精度和召回率。
- 评估指标:由于欺诈检测是一个不平衡分类问题,因此除了混淆矩阵外,还可以使用精确率、召回率和F1分数等指标来评估模型性能。
七、总结
以上代码提供了一个基本的框架来使用自动编码器进行信用卡欺诈检测。通过训练自动编码器来学习正常交易数据的分布,并通过计算重构误差来识别潜在的异常交易。这个项目现在不仅能够训练自动编码器来检测信用卡欺诈,还能够通过多种方式评估模型的性能,并且能够可视化结果。这些改进使得该项目更加贴近实际应用场景,也为你提供了更多的工具来探索和优化异常检测模型。
如果文章内容对您有所触动,别忘了点赞、关注,收藏!
推荐阅读:
1.【人工智能】项目实践与案例分析:利用机器学习探测外太空中的系外行星
2.【人工智能】利用TensorFlow.js在浏览器中实现一个基本的情感分析系统
3.【人工智能】TensorFlow lite介绍、应用场景以及项目实践:使用TensorFlow Lite进行数字分类
4.【人工智能】使用NLP进行语音到文本的转换和主题的提取项目实践及案例分析一
5.【人工智能】使用NLP进行语音到文本的转换和主题的提取项目实践及案例分析二
相关文章:
![](https://www.ngui.cc/images/no-images.jpg)
【人工智能】项目案例分析:使用自动编码器进行信用卡欺诈检测
一、项目背景 信用卡欺诈是金融行业面临的一个重要问题,快速且准确的欺诈检测对于保护消费者和金融机构的利益至关重要。本项目旨在通过利用自动编码器(Autoencoder)这一无监督学习算法,来检测信用卡交易中的欺诈行为,…...
![](https://i-blog.csdnimg.cn/direct/286329e36cd24dbd9b1bea872f9427bd.png)
【工控】线扫相机小结
背景简介 我目前接触到的线扫相机有两种形式: 无采集卡,数据通过网线传输。 配备采集卡,使用PCIe接口。 第一种形式的数据通过网线传输,速度较慢,因此扫描和生成图像的速度都较慢,参数设置主要集中在相机本身。第二种形式的相机配备采集卡,通常速度更快,但由于相机和…...
![](https://www.ngui.cc/images/no-images.jpg)
将Web应用部署到Tomcat根目录的三种方法
将应用部署到Tomcat根目录的三种方法 将应用部署到Tomcat根目录的目的是可以通过"http://[ip]:[port]"直接访问应用,而不是使用"http://[ip]:[port]/[appName]"上下文路径进行访问。 方法一:(最简单直接的方法࿰…...
![](https://i-blog.csdnimg.cn/direct/0287a29cf9e942148e92618500326701.jpeg)
工业和信息化部教育与考试中心计算机相关专业介绍
国家工信部的认证证书在行业内享有较高声誉。 此外,还设有专门的工业和信息化技术技能人才数据库查询服务,进一步方便了个人和企业对相关职业能力证书的查询需求。 序号 专业工种 级别 备注 1 JAVA程序员 初级 职业技术 2 电子…...
![](https://i-blog.csdnimg.cn/direct/2388942d89c942fdbe4c012bfdd78f67.jpeg)
第二证券:生物天然气线上交易达成 创新探索互联互通、气证合一
8月20日,上海石油天然气生意中心在国内立异推出生物天然气线上生意。当日,绿气新动力(北京)有限公司(简称“绿气新动力”)挂单的1500万立方米生物天然气被百事食物(我国)有限公司&am…...
![](https://img-blog.csdnimg.cn/img_convert/c5df897c78af358317fbb5e99de8745a.jpeg)
重磅!RISC-V+OpenHarmony平板电脑发布
仟江水商业电讯(8月18日 北京 委托发布)RISC-V作为历史上全球发展速度最快、创新最为活跃的开放指令架构,正在不断拓展高性能计算领域的边界。OpenHarmony是由开放原子开源基金会孵化并运营的开源项目,已成为发展速度最快的智能终…...
[DL]深度学习_扩散模型
扩散模型原理 深入浅出扩散模型 一、概念简介 1、Denoising Diffusion Probalistic Models,DDPM 1.1 扩散模型运行原理 首先sample一个都是噪声的图片向量,这个向量的shape和要生成的图像大小相同。通过Denoise过程来一步一步有规律的滤去噪声。Den…...
![](https://i-blog.csdnimg.cn/direct/f9c176fba3364fcbaeac63d6ee0a9bd2.png)
AI学习记录 - 如何快速构造一个简单的token词汇表
创作不易,有用的话点个赞 先直接贴代码,我们再慢慢分析,代码来自openai的图像分类模型的一小段 def bytes_to_unicode():"""Returns list of utf-8 byte and a corresponding list of unicode strings.The reversible bpe c…...
![](https://www.ngui.cc/images/no-images.jpg)
JAVA中的数组流ByteArrayOutputStream
Java 中的 ByteArrayOutputStream 是一个字节数组输出流,它允许应用程序以字节的形式写入数据到一个字节数组缓冲区中。以下是对 ByteArrayOutputStream 的详细介绍,包括其构造方法、方法、使用示例以及运行结果。 一、ByteArrayOutputStream 概述 Byt…...
![](https://i-blog.csdnimg.cn/direct/5debc02c48ad494a85f0800100d7ff93.png)
S3C2440中断处理
一、中断处理机制概述 中断是CPU在执行程序过程中,遇到急需处理的事件时,暂时停止当前程序的执行,转而执行处理该事件的中断服务程序,并在处理完毕后返回原程序继续执行的过程。S3C2440提供了丰富的中断源,包括内部中…...
![](https://www.ngui.cc/images/no-images.jpg)
《数据分析与知识发现》
《数据分析与知识发现》介绍 1 期刊定位 《数据分析与知识发现》(Data Analysis and Knowledge Discovery)是由中国科学院主管、中国科学院文献情报中心主办的学术性专业期刊。期刊创刊于2017年,由《现代图书情报技术》(1985-20…...
![](https://img-blog.csdnimg.cn/img_convert/711232e4fd465a88b0c32e5e562934ee.jpeg)
IaaS,PaaS,aPaaS,SaaS,FaaS,如何区分?
IaaS, PaaS,SaaS,aPaaS 还有一种 FaaS ,这几个都是云服务中常见的 5 大类型: IaaS:基础架构即服务,Infrastructure as a Service PaaS:平台即服务,Platform as a Service aPaaS&…...
![](https://www.ngui.cc/images/no-images.jpg)
软件测试工具分享
要想在测试中旗开得胜,趁手的“武器”那是相当重要(说人话,要保证测试质量和效率,测试工具也很重要)。现在,小酋打算亮一亮自己的武器库,希望不要闪瞎你的眼(天上在打雷,…...
![](https://img-blog.csdnimg.cn/img_convert/8b1622c02f031f07a084e77386bfe36c.jpeg)
word翻译工具有哪些?5个工具助你快速翻译Word文件
无论是商业沟通还是文化交流,都需要跨越语言障碍。而文档翻译则是这一过程中的重要环节之一。 想象一下,当你需要将一份重要的Word文档从一种语言翻译成另一种语言时,如果手动逐句翻译不仅耗时耗力,还可能因为文化差异导致误解。…...
![](https://www.ngui.cc/images/no-images.jpg)
【51单片机】ds18b20驱动,11.0592MHZ,使用DS18b20
文章目录 ds18b20.h #include <reg52.h> #include <intrins.h> #include <math.h>// 管脚定义 sbit DS18B20_DATA_PIN = P1 ^ 0; // DS18B20数据口定义/******************************************************************************* * 函 数 名 …...
![](https://i-blog.csdnimg.cn/direct/7666e5b1cb984615a0a02756b8641440.gif#pic_center)
Vue 导航条+滑块效果
目录 前言代码效果展示导航实现代码导航实现代码导航应用代码前言 总结一个最近开发的需求。设计稿里面有一个置顶的导航条,要求在激活的项目下面展示个下划线。我最先开始尝试的是使用 after 的伪类选择器,直接效果一样,但是展示的时候就会闪现变化,感觉不够自然,参考了一…...
![](https://i-blog.csdnimg.cn/direct/60e970f945844a31a8e8db18e31a0840.png)
Android:使用Gson常见问题(包含解决将Long型转化为科学计数法的问题)
一、解决将Long型转化为科学计数法的问题 1.1 场景 将一个对象转为Map类型时,调用Gson.fromJson发现,原来对象中的long类型的personId字段,被解析成了科学计数法,导致请求接口失败,报参数错误。 解决结果图 1.2、Exa…...
![](https://i-blog.csdnimg.cn/direct/ba906d205a344084ba933f82abfd9a98.png#pic_center)
【Win开发环境搭建】Redis与可视化工具详细安装与配置过程
🎯导读:本文档提供了Redis的简介、安装指南、配置教程及常见操作方法。包括了安装包的选择与配置环境变量的过程,详细说明了如何通过修改配置文件来设置密码和端口等内容。同时,文档还介绍了如何使用命令行工具连接Redisÿ…...
![](https://i-blog.csdnimg.cn/direct/eb64a0465c0a43ecaa09c221c991215b.png)
Compose知识分享
前言 “Jetpack Compose 是一个适用于 Android 的新式声明性界面工具包。Compose 提供声明性 API,让您可在不以命令方式改变前端视图的情况下呈现应用界面,从而使编写和维护应用界面变得更加容易。” 以上是Compose官网中对于Compose这套全新的Androi…...
![](https://www.ngui.cc/images/no-images.jpg)
python-study-day5
urllib中handler的使用 import urllib.request url "http://www.baidu.com" headers {User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/122.0.0.0 Safari/537.36 Edg/122.0.0.0 } # 请求地址的定制 reques…...
![](https://i-blog.csdnimg.cn/direct/51c548e7014c4e7e8708a43ad5168f3b.png)
Telegram mini app 本地开发配置
前言: 为了能在telegram里本地调试mini app,参考了网上很多方案,踩了不少坑。最后整了一个适合自己的方案,记录一下。 这个方案一定不是最好的,不过是目前适合我上手开发的方案了。 本文章适合需要在 telegram 本地…...
![](https://www.ngui.cc/images/no-images.jpg)
python发票查验接口助您拒绝做糊涂账、发票ocr
发票识别发票查验接口让发票真假立现。仅需一键上传发票图片,即可实现发票真伪的秒速、批量验证,操作简单方便,避免因人工核验失误所导致“错账”现象的发生,减轻财务工作负担,提升企业工作效率,降低因假票…...
![](https://i-blog.csdnimg.cn/direct/85c2e96f079846eeb5ae8a2ea88bfa34.gif)
【Linux】线程控制|POSIX线程库|多线程创建|线程终止|等待|线程分离|线程空间布局
目录 编辑 POSIX线程库 多线程创建 独立栈结构 获取线程ID pthread_self 线程终止 return终止线程 pthread_exit pthread_cancel 线程等待 退出码问题 线程分离 测试 线程ID及地址空间布局 编辑 POSIX线程库 pthread线程库是 POSIX线程库的一部分…...
![](https://img-blog.csdnimg.cn/img_convert/4f004f20a1babe1a71371935f56d251e.png)
JimuReport 积木报表 v1.8.0 版本发布,开源可视化报表
项目介绍 一款免费的数据可视化报表工具,含报表和大屏设计,像搭建积木一样在线设计报表!功能涵盖,数据报表、打印设计、图表报表、大屏设计等! Web 版报表设计器,类似于excel操作风格,通过拖拽完…...
![](https://img-blog.csdnimg.cn/img_convert/03959b394bd26a3ffb5787f56522977c.png)
性能优化理论篇 | swap area是个什么东西
我们知道每台计算机的内存(RAM)都是有限的,而我们的应用程序需要加载到内存才能被运行,如果一台机器运行多个应用程序时,内存可能会耗尽。Linux 系统中的“交换空间(也称为交换分区)”可以帮助缓…...
![](https://www.ngui.cc/images/no-images.jpg)
Photoshop (PS)下载安装win/mac版
目录 一、概述 下载 二、安装步骤 三、使用教程 四、快捷键汇总 一、概述 Adobe Photoshop,简称“PS”,是由Adobe Systems开发和发行的图像处理软件。它主要处理以像素所构成的数字图像,涵盖了诸多领域,如图像编辑、图像合成…...
![](https://i-blog.csdnimg.cn/direct/d642d4151b204e2a8541e7c514be8d62.png)
初识redis:Set类型
Set有很多种含义,比如集合,比如设置(和get相对应)。 在这里我们说的set是指的redis中的集合,并且这里的集合是无序的,和之前的list是对应的。 List : [1,2,3] 和 [2,1,3] 是两个不同的listSe…...
![](https://www.ngui.cc/images/no-images.jpg)
Qt 设置QTableView的某列或某行只读
我的做法是实现一个委托(delegate),然后把它设给你要只读的列或行 class ReadOnlyDelegate: public QItemDelegate {public:ReadOnlyDelegate(QWidget *parent NULL):QItemDelegate(parent){}QWidget *createEditor(QWidget *parent, const…...
![](https://www.ngui.cc/images/no-images.jpg)
这么多焊工证,我该拥有那种焊工证呢?
焊接与切割作为特种作业工作,国家根据不同的环境和作业特点,从事焊接工作的焊工需要持证上岗工作,那么是不是焊接就只有一种工作证呢?如果不是,焊工所在的工作岗位需要什么样的焊工证,如何取得焊工证&#…...
![](https://www.ngui.cc/images/no-images.jpg)
HttpWebRequest访问https请求被中止: 未能创建 SSL/TLS 安全通道
编写代码,使用HttpWebRequest访问网页,错误提示: 未能创建 SSL/TLS 安全通道 页面本来是Http网址,突然转换为https网址,所以遇到这个问题也算正常。将解决方法记录下来给需要的人。 //只需要在 HttpWebRequest 发送…...
![](http://www.leiphone.com/wp-content/uploads/2012/04/cloud.jpg)
南宁网站开发企业/宜兴百度推广公司
编者按:本文作者为Alexander Haislip,他是云服务器管理公司ScaleXtreme的市场经理。其代表作有 Essentials of Venture Capital(《风险投资概要》)。 云的出现确实为科技生活带来了很多便利,但随着使用时间越来越多&a…...
![](https://img-blog.csdnimg.cn/f2a415f25bf14fb2844b3555eb1805c4.png)
厦门电子商务网站建设/陕西网络推广公司
BDD - SpecFlow Context Injection 上下文依赖注入引言Context Injection如何使用 Context InjectionContext Injection 规则举例 1 共享字段举例 2 共享引用类自定义 Injection Framework 注入框架自定义 Container引言 BDD SpecFlow Scenario 在整个执行周期,Ste…...
![](https://images2018.cnblogs.com/blog/443934/201803/443934-20180305163037306-1044033401.png)
群晖 搭建两个wordpress/seo网络推广外包公司
Spring AOP 提供了 5 种类型的通知,它们分别是 Before Advice(前置通知)、After Returning Advice(后置通知)、Interception Around Advice(周围通知)、Throws Advice(异常通知)和 I…...
![](/images/no-images.jpg)
网站建设意见征求表/网络推广方案的内容
暂无评价|0人阅读|0次下载|举报文档 DSC曲线的三次样条拟合与Matlab实现_能源/化工_工程科技_专业资料。DSC曲线拟合与Matlab实现第...人阅读|次下载 曲线拟合的最小二乘法matlab举例_中医中药_医药卫生_专业资料。曲线拟合的最小二乘法 学院:光电信息学院 姓名:赵海峰 学号:20…...
![](https://www.oschina.net/img/hot3.png)
鹿泉企业网站建设/产品网络营销策划方案
2019独角兽企业重金招聘Python工程师标准>>> 实现Externalnalizable接口 实现Externalnalizable接口 package meng.springboot.demo.obj;import java.io.Externalizable; import java.io.IOException; import java.io.ObjectInput; import java.io.ObjectOutput; im…...
![](https://img-blog.csdnimg.cn/c6f0e71443b841b89cfb8f3e81fb3bc3.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAcXFfMzc1OTEzMTU=,size_18,color_FFFFFF,t_70,g_se,x_16)
wordpress wp config/百度平台我的订单
参考资料:OpenDDS环境搭建-Windows 10_Saint_EK的博客-CSDN博客_opendds环境搭建由于项目中需要使用到OpenDDS,故记录下环境搭建过程。安装环境windows 10 64位已安装 Visual Stdio 2017、Visual Stdio 2019安装步骤总述:需安装Perl、ACETAO、…...