机器学习-人与机器生数据的区分模型测试-数据处理1
附件为训练数据,总体的流程可以作为参考。
导入依赖
import pandas as pd
import os
import numpy as np
from sklearn.model_selection import train_test_split,GridSearchCV
from sklearn.ensemble import RandomForestClassifier,VotingClassifier
from sklearn.metrics import accuracy_score, classification_report, confusion_matrix,roc_curve
from xgboost import XGBClassifier
from sklearn.linear_model import LogisticRegression
from sklearn.neighbors import KNeighborsClassifier
from sklearn.tree import DecisionTreeClassifier
from lightgbm import LGBMClassifier
import matplotlib.pyplot as plt
import seaborn as sns
from sklearn.preprocessing import StandardScaler,LabelEncoder
from catboost import CatBoostClassifier
from statsmodels.stats.outliers_influence import variance_inflation_factor
# 分析高频共现特征组合
from mlxtend.frequent_patterns import apriori
from sklearn.metrics import roc_auc_score
import json
# 设置工作目录
os.chdir(r'D:\python code\人工与机器人识别')
# 加载数据集
data = pd.read_csv('bots_vs_users.csv') # 替换为你的数据集路径
EDA
数据分布
def clean_data(data):for col in data.columns:print(col)if col == 'city': # 跳过第一列continueelse: data[col] = data[col].replace('Unknown','-1') # 使用均值填充缺失值data[col] = data[col].astype('float64') # 转换为数值类型data[col] = data[col].fillna(data[col].mean()) # 使用均值填充缺失值return datadata = clean_data(data)encoder = LabelEncoder()
encoder.fit(data['city']) # 只在第一个DF上fit
data['city2'] = encoder.transform(data['city'])# 第一次拆分:训练集(70%) + 临时集(30%),
data,temp = train_test_split(data, test_size=0.1, random_state=42)# 输出拆分后的数据集大小
print("训练集大小:", data.shape)
print("验证集大小:", temp.shape)
print(data.head())
这里是数据的相关描述统计
描述统计
# 训练集编码
target_list = ['city', 'target', 'city2']
data_clean = data.drop(target_list, axis=1).copy()# 基本统计描述
print(data_clean.describe().T)print("方差:\n", data_clean.var(numeric_only=True))
print("众数:\n", data_clean.mode().T)
print("偏度:\n", data_clean.skew(numeric_only=True)) # 需确保数据为数值型
print("峰度:\n", data_clean.kurtosis(numeric_only=True))
查看数据的分布情况
def plot_cont_var_dist(df, feature, target='target'):"""绘制连续变量的正负样本核密度估计图(KDE),并计算并标注 KS(Kolmogorov-Smirnov)统计量。参数:df (pandas.DataFrame): 包含特征和目标变量的数据集。feature (str): 要绘制的连续特征的名称。target (str, 可选): 目标变量的名称,默认为 'target'。"""# 设置图形的大小plt.figure(figsize=(10,6))# 提取正样本数据,并处理无穷大值,移除缺失值pos_data = df.loc[df[target]==1, feature].replace([np.inf, -np.inf], np.nan).dropna()# 提取负样本数据,并处理无穷大值,移除缺失值neg_data = df.loc[df[target]==0, feature].replace([np.inf, -np.inf], np.nan).dropna()# 绘制正样本的核密度估计图sns.kdeplot(pos_data, label='Positive', fill=True, alpha=0.5, color='#FF6B6B')# 绘制负样本的核密度估计图sns.kdeplot(neg_data, label='Negative',fill=True, alpha=0.5, color='#4ECDC4')# 检查正样本或负样本数据是否为空,如果为空则跳过该特征的绘制if pos_data.empty or neg_data.empty:print(f"Skipped {feature} due to empty data")plt.close()returntry:# 计算 ROC 曲线所需的假正率、真正率和阈值# 由于使用连续变量计算 KS 需要离散化处理,这里借助 roc_curve 函数fpr, tpr, thresholds = roc_curve(df[target], df[feature])# 计算 KS 统计量,即真正率与假正率差值的最大值ks_value = max(tpr - fpr)# 找到对应 KS 统计量最大值的阈值ks_threshold = thresholds[np.argmax(tpr - fpr)]except Exception as e:# 若计算 KS 统计量时出错,打印错误信息并关闭图形print(f"Error calculating KS for {feature}: {str(e)}")plt.close()return# 在图中绘制 KS 阈值对应的垂直线plt.axvline(ks_threshold, color='#2A363B', linestyle='--', linewidth=1.5, label=f'Cutoff: {ks_threshold:.2f}')# 设置图形标题,包含特征名称和 KS 统计量的值plt.title(f'{feature}\nKS Statistic = {ks_value:.2f}', fontsize=14)# 设置 x 轴标签plt.xlabel(feature, fontsize=12)# 设置 y 轴标签plt.ylabel('Density', fontsize=12)# 显示图例,去掉边框plt.legend(frameon=False)# 自动调整子图参数,使之填充整个图像区域plt.tight_layout()# 显示图形plt.show()# 关闭图形,释放内存plt.close()# 改进后的过滤逻辑
def is_valid_numeric(col_data):"""判断传入的列数据是否为有效的数值型特征。有效的数值型特征需满足以下条件:1. 数据类型为数值类型。2. 唯一值的数量超过 20 个。3. 数据类型不是分类类型。参数:col_data (pandas.Series): 需要进行判断的列数据。返回:bool: 如果满足所有条件则返回 True,否则返回 False。"""return (# 检查数据类型是否为数值类型pd.api.types.is_numeric_dtype(col_data) and # 检查唯一值的数量是否超过 20 个col_data.nunique() > 20 and# 检查数据类型是否不是分类类型not isinstance(col_data.dtype, pd.CategoricalDtype))filtered_list = [col for col in data.columns if col not in target_list and is_valid_numeric(data[col])]# 增强型绘图循环
for col in filtered_list:try:# 预处理inf值data[col] = data[col].replace([np.inf, -np.inf], np.nan)# 跳过缺失率过高的特征if data[col].isnull().mean() > 0.8:print(f"Skipped {col} due to high missing rate")continueplot_cont_var_dist(data, col)except Exception as e:print(f"Plotting failed for {col}: {str(e)}")#查看数据1的分布情况
one_ratio_list = []
for col in data.columns:if col == 'city' or col == 'target' or col == 'city2': # 跳过第一列continueelse:one_ratio = data[col].mean() # 计算1值占比print(f"{col}: {one_ratio}")one_ratio_list.append(one_ratio)plt.figure(figsize=(8,4))
sns.histplot(one_ratio_list, bins=20, kde=True)
plt.title('Histogram of 1-Value Proportion Distribution')
plt.xlabel('Proportion of 1 value')
plt.show()
上述代码会输出相关数据的分布图片,数据很多不一一展示。
相关文章:
机器学习-人与机器生数据的区分模型测试-数据处理1
附件为训练数据,总体的流程可以作为参考。 导入依赖 import pandas as pd import os import numpy as np from sklearn.model_selection import train_test_split,GridSearchCV from sklearn.ensemble import RandomForestClassifier,VotingClassifier from skle…...
【Linux】进程间通信(一):认识管道
📝前言: 这篇文章我们来讲讲进程间通信——认识管道 🎬个人简介:努力学习ing 📋个人专栏:Linux 🎀CSDN主页 愚润求学 🌄其他专栏:C学习笔记,C语言入门基础&a…...
AMD Vivado™ 设计套件生成加密比特流和加密密钥
概括 重要提示:有关使用AMD Vivado™ Design Suite 2016.4 及更早版本进行 eFUSE 编程的重要更新,请参阅AMD设计咨询 68832 。 本应用说明介绍了使用AMD Vivado™ 设计套件生成加密比特流和加密密钥(高级加密标准伽罗瓦/计数器模式 (AES-GCM)…...
第三十四节:特征检测与描述-SIFT/SURF 特征 (专利算法)
一、特征检测:计算机视觉的基石 在计算机视觉领域中,特征检测与描述是实现图像理解的核心技术。就像人类通过识别物体边缘、角点等特征来认知世界,算法通过检测图像中的关键特征点来实现: 图像匹配与拼接 物体识别与跟踪 三维重建 运动分析 其中,SIFT(Scale-Invariant F…...
【AI】SpringAI 第二弹:基于多模型实现流式输出
目录 一、基于多模型实现流式输出 1.1 什么是流式输出 1.2 多模型引入 1.3 代码实现 1.3.1 流式输出的API介绍 1.3.2 Flux 源码分析 二、了解 Reactor 模型 三、SSE 协议 一、基于多模型实现流式输出 1.1 什么是流式输出 流式输出(Streaming Output)是指数据在生成过程…...
SQL语句执行问题
执行顺序 select [all|distinct] <目标列的表达式1> AS [别名], <目标列的表达式2> AS [别名]... from <表名1或视图名1> [别名],<表名2或视图名2> [别名]... [where <条件表达式>] [group by <列名>] [having <条件表达式>] [ord…...
模型量化AWQ和GPTQ哪种效果好?
环境: AWQ GPTQ 问题描述: 模型量化AWQ和GPTQ哪种效果好? 解决方案: 关于AWQ(Adaptive Weight Quantization)和GPTQ(Generative Pre-trained Transformer Quantization)这两种量化方法的…...
Github 2025-05-17 Rust开源项目日报 Top10
根据Github Trendings的统计,今日(2025-05-17统计)共有10个项目上榜。根据开发语言中项目的数量,汇总情况如下: 开发语言项目数量Rust项目10Dart项目1RustDesk: 用Rust编写的开源远程桌面软件 创建周期:1218 天开发语言:Rust, Dart协议类型:GNU Affero General Public Li…...
借助 CodeBuddy 打造我的图标预览平台 —— IconWiz 开发实录
我正在参加CodeBuddy「首席试玩官」内容创作大赛,本文所使用的 CodeBuddy 免费下载链接:腾讯云代码助手 CodeBuddy - AI 时代的智能编程伙伴 想做一款自己的图标预览平台 这段时间我在做前端 UI 设计时,常常需要到处找图标素材,复…...
KL散度 (Kullback-Leibler Divergence)
KL散度,也称为相对熵 (Relative Entropy),是信息论中一个核心概念,用于衡量两个概率分布之间的差异。给定两个概率分布 P ( x ) P(x) P(x) 和 Q ( x ) Q(x) Q(x)(对于离散随机变量)或 p ( x ) p(x) p(x) 和 q ( x …...
【Linux网络】NAT和代理服务
NAT 之前我们讨论了,IPv4协议中,IP地址数量不充足的问题。 原始报文途径路由器WAN口时,对报文中的源IP进行替换的过程,叫做NAT。 NAT技术当前解决IP地址不够用的主要手段,是路由器的一个重要功能: NAT能…...
DeepSeek赋能电商,智能客服机器人破解大型活动人力困境
1. DeepSeek 与电商客服结合的背景 1.1 电商行业客服需求特点 电商行业具有独特的客服需求特点,这些特点决定了智能客服机器人在该行业的必要性和重要性。 高并发性:电商平台的用户数量庞大,尤其是在促销活动期间,用户咨询量会…...
Unity序列化字段、单例模式(Singleton Pattern)
一、序列化字段 在Unity中,序列化字段是一个非常重要的概念,主要用于在Unity编辑器中显示和编辑类的成员变量,或者在运行时将对象的状态保存到文件或网络中。 1.Unity序列化字段的作用 在编辑器中显示和编辑字段:默认情况下&…...
一个可拖拉实现列表排序的WPF开源控件
从零学习构建一个完整的系统 推荐一个可通过拖拉,来实现列表元素的排序的WPF控件。 项目简介 gong-wpf-dragdrop是一个开源的.NET项目,用于在WPF应用程序中实现拖放功能,可以让开发人员快速、简单的实现拖放的操作功能。 可以在同一控件内…...
hadoop.proxyuser.代理用户.授信域 用来干什么的
在Hadoop的core-site.xml文件中存在三个可选配置,如下 <property><name>hadoop.proxyuser.root.hosts</name><value>*</value> </property> <property><name>hadoop.proxyuser.root.groups</name><value…...
python 自动化教程
文章目录 前言整数变量字符串变量列表变量算术操作比较操作逻辑操作if语句for循环遍历列表while循环定义函数调用函数导入模块使用模块中的函数启动Chrome浏览器打开网页定位元素并输入内容提交表单关闭浏览器发送GET请求获取网页内容使…...
C++学习:六个月从基础到就业——C++11/14:列表初始化
C学习:六个月从基础到就业——C11/14:列表初始化 本文是我C学习之旅系列的第四十三篇技术文章,也是第三阶段"现代C特性"的第五篇,主要介绍C11/14中的列表初始化特性。查看完整系列目录了解更多内容。 引言 在C11之前&a…...
城市静音革命:当垃圾桶遇上缓冲器
缓冲垃圾桶的核心原理是通过机械或液压装置实现垃圾桶盖的缓慢闭合,包含以下技术要点:能量吸收机制液压式:通过活塞挤压油液产生阻尼力,将动能转化为热能耗散弹簧式:利用弹性变形储存和释放能量,配合摩…...
数据库的规范化设计方法---3种范式
第一范式(1NF):确保表中的每个字段都是不可分割的基本数据项。 第二范式(2NF):在满足1NF的基础上,确保非主属性完全依赖于主键。 第三范式(3NF):在满足2NF的基…...
p024基于Django的网上购物系统的设计与实现
开发语言:Python框架:djangoPython版本:python3.7.7数据库:mysql 5.7数据库工具:Navicat11开发软件:PyCharm 系统展示 管理员登录 管理员功能界面 用户管理 商品类型管理 商品信息管理 系统管理 订单管理…...
C++跨平台开发:挑战与应对策略
C跨平台开发:挑战与应对策略 在如今设备多样、操作系统碎片化的开发环境中,跨平台能力已成为衡量软件生命力与团队工程效率的重要指标。C 作为高性能系统级语言,在游戏引擎、嵌入式系统、实时渲染等领域依旧坚挺。然而,实现“一次…...
Kotlin 作用域函数(let、run、with、apply、also)对比
Kotlin 的 作用域函数(Scope Functions) 是简化代码逻辑的重要工具,它们通过临时作用域为对象提供更简洁的操作方式。以下是 let、run、with、apply、also 的对比分析: 一、核心区别对比表 函数上下文对象引用返回值是否扩展函数…...
JavaScript性能优化实战(11):前沿技术在性能优化中的应用
引言 随着Web应用复杂度和性能需求不断提高,传统的JavaScript优化技术已经无法满足某些高性能计算场景的需求。本文将深入探讨前沿Web技术如何突破JavaScript的性能瓶颈,为Web应用提供接近原生应用的性能体验。从底层计算到图形渲染,从并发处理到动画优化,我们将通过实际案…...
数据结构【AVL树】
AVL树 1.AVL树1.AVL的概念2.平衡因子 2.AVl树的实现2.1AVL树的结构2.2AVL树的插入2.3 旋转2.3.1 旋转的原则 1.AVL树 1.AVL的概念 AVL树可以是一个空树。 它的左右子树都是AVL树,且左右子树的高度差的绝对值不超过1。AVL树是一颗高度平衡搜索二叉树,通…...
电动调节V型球阀:行业应用与材质选择全解析
电动调节V型球阀:行业应用与材质选择全解析 作为工业自动化控制中的关键设备,电动调节V型球阀凭借其独特的结构设计与高性能调节能力,在石油、化工、造纸等高要求领域广泛应用。本文将从核心功能、行业应用场景、材质选择要点等方面深入解析…...
页面上如何显示特殊字符、Unicode字符?
在前端开发中,显示特殊字符通常涉及到HTML实体(HTML Entities)或 Unicode 字符的使用。以下是一些常见的方法来处理特殊字符的显示: 1、HTML实体: HTML为一些常见的特殊字符提供了预定义的实体。例如,要显…...
桌面端进程通信
以下是关于 Electron 桌面端进程通信的基本知识点总结: 一、Electron 进程模型基础 1. 进程类型与职责 进程类型职责权限主进程(Main)创建窗口、系统级操作、IPC中枢完全Node.js访问权限渲染进程(Renderer)展示Web内容、UI交互默认受限(可配置开启Node.js)预加载脚本(Prelo…...
vue2 切换主题色以及单页面好使方法
今天要新增一个页面要根据不同公司切换不同页面主题色,一点一点来,怎么快速更改 el-pagination 分页组件主题色。 <el-pagination :page-size"pageSize" :pager-count"pageCount"layout"sizes, prev, pager, next, jumper,…...
三层固定实体架构:高效实现图上的检索增强生成(RAG)
知识图谱正在成为跨各个领域组织和检索信息的强大工具。它们越来越多地与机器学习和自然语言处理技术相结合,以增强信息检索和推理能力。在本文中,我介绍了一种用于构建知识图谱的三层架构,结合了固定本体实体、文档片段和提取的命名实体。通过利用嵌入和余弦相似度,这种方…...
pnpm 与 npm 的核心区别
以下是 pnpm 与 npm 的核心区别总结,涵盖依赖管理、性能、安全性等关键维度: 1. 依赖存储机制 • npm: 每个项目的依赖独立存储于 node_modules,即使多个项目使用相同版本的包,也会重复下载和存储。例如,1…...
NVMe简介6之PCIe事务层
PCIe的事务层连接了PCIe设备核心与PCIe链路,这里主要基于PCIe事务层进行分析。事务层采用TLP传输事务,完整的TLP由TLPPrefix、TLP头、Payload和TLP Digest组成。TLP头是TLP中最关键的部分,一般由三个或四个双字的长度,其格式定义如…...
【C++详解】string各种接口如何使用保姆级攻略
文章目录 一、string介绍二、string使用构造函数析构函数赋值运算符重载string的遍历修改方法1、下标[]2、迭代器3、范围for 迭代器使用详解const迭代器反向迭代器(reverse) Capacity(容量相关)size/lengthmax_sizecapacityclear/emptyshrink_to_fit(缩容)reserve(扩…...
深入理解 requestIdleCallback:浏览器空闲时段的性能优化利器
requestIdleCallback 核心作用 requestIdleCallback 是浏览器提供的 API,用于将非关键任务延迟到浏览器空闲时段执行,避免阻塞用户交互、动画等关键任务,从而提升页面性能体验。 基本语法 const handle window.requestIdleCallback(callb…...
QML鼠标事件和按键事件
1 鼠标事件 1.1 MouseArea组件 在QML中,鼠标事件主要通过MouseArea元素处理,它是用于检测和响应鼠标交互的核心组件。常用属性 cursorShape: 光标形状acceptedButtons: 设置响应鼠标的哪些按键事件,默认为鼠标左键 Qt.LeftButton࿱…...
Animaster:一次由 CodeBuddy 主导的 CSS 动画编辑器诞生记
我正在参加CodeBuddy「首席试玩官」内容创作大赛,本文所使用的 CodeBuddy 免费下载链接:腾讯云代码助手 CodeBuddy - AI 时代的智能编程伙伴 起心动念:我想要一个动画编辑器 那天我突然想到,如果能有一个简单好用的 CSS 动画编辑…...
Git 版本控制系统入门指南
Git 版本控制系统入门指南 一、Git 基础概念 1. 什么是 Git? Git 是一个分布式版本控制系统,它可以: 跟踪文件变化协调多人协作管理代码版本支持离线工作保证数据完整性 2. Git 的特点 分布式架构快速分支操作完整历史记录数据完整性保…...
GitHub 趋势日报 (2025年05月16日)
本日报由 TrendForge 系统生成 https://trendforge.devlive.org/ 🌐 本日报中的项目描述已自动翻译为中文 📈 今日整体趋势 Top 10 排名项目名称项目描述今日获星总星数语言1TapXWorld/ChinaTextbookPDF教材。⭐ 4792⭐ 19814Roff2xming521/WeClone&…...
C/C++之内存管理
1. 内存分布 我们定义的变量对于电脑来说也叫数据,同时电脑也会把这些数据分为不同的类型,分别是局部数据,静态数据,全局数据,常量数据和动态申请数据。 在 C 中,各类数据存储位置如下: • 局…...
GitHub文档加载器设计与实现
文章结构: 目录 GitHub文档加载器设计与实现 引言 架构设计 主要组件 核心功能 文档加载流程 加载单个文件 加载目录内容 错误处理与健壮性 分支回退策略 文件类型和大小限制 安全性考虑 SSL证书验证 使用示例 基本使用 测试环境配置 最佳实践 结…...
历史数据分析——中证白酒
简介 中证白酒指数选取涉及白酒生产业务相关上市公司证券作为指数样本,为投资者提供更多样化的投资标的。 估值 中证白酒总体的PB是5.26,在过去十年间位于23.76%,属于较低的水平。 中证白酒总体的PE是20.13,在过去十年间,位于14.24%,属于较低的水平。 从估值的角度似…...
PHP8.0版本导出excel失败
环境:fastadmin框架,不是原版接手的项目。PHP8.0,mysql5.7. code // 创建一个新的 Spreadsheet 对象 $spreadsheet new Spreadsheet(); $worksheet $spreadsheet->getActiveSheet();// 设置表头 $worksheet->setCellValue(A1, ID); $worksheet…...
Seata源码—5.全局事务的创建与返回处理二
大纲 1.Seata开启分布式事务的流程总结 2.Seata生成全局事务ID的雪花算法源码 3.生成xid以及对全局事务会话进行持久化的源码 4.全局事务会话数据持久化的实现源码 5.Seata Server创建全局事务与返回xid的源码 6.Client获取Server的响应与处理的源码 7.Seata与Dubbo整合…...
mac-M系列芯片安装软件报错:***已损坏,无法打开。推出磁盘问题
因为你安装的软件在Intel 或arm芯片的mac上没有签名导致。 首先打开任何来源操作 在系统设置中配置,如下图: 2. 然后打开终端,输入: sudo spctl --master-disable然后输入电脑锁屏密码 打开了任何来源,还遇到已损坏…...
端到端自动驾驶系统实战指南:从Comma.ai架构到PyTorch部署
引言:端到端自动驾驶的技术革命 在自动驾驶技术演进历程中,端到端(End-to-End)架构正引领新一轮技术革命。不同于传统分模块处理感知、规划、控制的方案,端到端系统通过深度神经网络直接建立传感器原始数据到车辆控制…...
MoveIt Setup Assistant 在导入urdf文件的时候报错
在使用MoveIt Setup Assistant导入urdf文件的时候(load a urdf or collada robot model),找到urdf文件后MoveIt Setup Assistant闪退并报错: Warning: Ignoring XDG_SESSION_TYPEwayland on Gnome. Use QT_QPA_PLATFORMwayland to run on Wayland anyway…...
uniapp +vue +springboot多商家订餐系统
uniapp vue springboot多商家订餐系统,这个系统我整理调试的多商家,多用户的,多端小程序订餐系统,主要包含了uniapp小程序端,管理后台页面vue端,后台功能接口Springboot端,源码齐全,…...
docker迅雷自定义端口号、登录用户名密码
在NAS上部署迅雷,确实会带来很大的方便。但是目前很多教程都是讲怎么部署docker迅雷,鲜有将自定义配置的方法。这里讲一下怎么部署,并重点讲一下支持的自定义参数。 一、部署docker 在其他教程中,都是介绍的如下命令,…...
联想笔记本黑屏了,排线出问题还是静电
以下引用 联想电脑屏幕不亮,电源键和键盘灯均正常的解决办法(超简单)_拯救者屏幕不亮,键盘有电-CSDN博客 昨天正常关机后,今天一早来工位打开电脑,美美开始玩手机。 一会之后抬头屏幕是黑的,还以为自动息…...
uniapp -- uCharts 仪表盘刻度显示 0.9999999 这样的值问题处理。
文章目录 🍉问题🍉解决方案🍉问题 在仪表盘上,23.8变成了 23.799999999999997 🍉解决方案 formatter格式化问题 1:在 config-ucharts.js 或 config-echarts.js 配置对应的 formatter 方法 formatter: {yAxisDemo1: function (...
为 Spring Boot 应用程序构建 CI/CD 流水线
为 Spring Boot 应用程序创建构建/部署流水线涉及多个步骤,而 Jenkins 可以作为强大的工具来自动化这些流程。在本教程中,我们将指导您为托管在 GitHub 上的 Spring Boot 应用程序设置流水线,使用 Jenkins 构建该应用程序,并将其部…...