ggplot2分类变量排序混乱?一文解决levels显示顺序问题

第一章:ggplot2分类变量排序问题的根源剖析

在使用 ggplot2 绘制条形图、箱线图等图形时,分类变量的默认排序往往不符合分析需求。其根本原因在于 ggplot2 默认遵循因子(factor)的水平顺序进行绘图,而非数据在原始数据框中的排列顺序或字母序。若未显式定义因子水平,R 会按字母顺序自动排序,这可能导致可视化结果误导分析判断。

因子水平决定绘图顺序

ggplot2 并不直接依据字符型变量的显示值排序,而是依赖其底层结构——因子的水平(levels)。当变量为字符型时,R 在转换过程中默认按字母升序设置因子水平。 例如:

# 示例数据
data <- data.frame(
  category = c("Low", "High", "Medium", "Low", "High"),
  values = c(1, 5, 3, 2, 4)
)

# 查看自动因子水平
factor(data$category)
# 输出: Levels: High Low Medium
此时若绘制条形图,"High" 将出现在最左侧,违背常规逻辑顺序。

常见排序异常场景

  • 名义变量按字母序排列,如 "Control" 排在 "Treatment" 前
  • 有序变量(如 Low/Medium/High)失去自然顺序
  • 时间序列类别(如 Jan/Feb/Mar)被重新排列

控制排序的关键策略

必须手动设置因子水平以实现预期顺序。常用方法如下:

# 显式设定因子水平
data$category <- factor(data$category, 
                       levels = c("Low", "Medium", "High"))

# 此后绘图将按指定顺序展示
library(ggplot2)
ggplot(data, aes(x = category, y = values)) + 
  geom_col()
原始值默认因子水平修正后水平
Low, High, MediumHigh, Low, MediumLow, Medium, High
通过合理管理因子水平,可从根本上解决 ggplot2 分类变量排序混乱的问题。

第二章:理解因子(factor)与levels的核心机制

2.1 因子类型在R中的存储原理与level属性

因子(factor)是R中用于表示分类数据的重要数据类型,其底层存储依赖于整数向量和level属性。R通过将每个类别映射为整数索引,并以`levels`属性保存原始标签,实现高效存储与运算。
内部结构解析
因子对象本质上是一个带有`class`属性为"factor"的整数向量,其`levels`属性定义了所有可能的分类值。

gender <- factor(c("Male", "Female", "Female", "Male"))
str(gender)
# 输出: Factor w/ 2 levels "Female","Male": 2 1 1 2
上述代码中,"Female"对应1,"Male"对应2,存储向量为整数c(2, 1, 1, 2),而显示时还原为原始标签。
levels属性的作用
  • 决定因子的可能取值范围
  • 影响排序行为(按levels顺序而非字典序)
  • 在建模中控制虚拟变量生成顺序

2.2 默认level顺序的生成规则及其潜在风险

在日志框架中,如Logback或Log4j,日志级别(level)通常遵循预定义的顺序:TRACE < DEBUG < INFO < WARN < ERROR。该顺序由框架内部枚举类静态初始化决定,开发者若未显式配置级别,则系统将采用默认顺序进行过滤与输出。
默认级别的内在实现

public enum LogLevel {
    TRACE(0), DEBUG(1), INFO(2), WARN(3), ERROR(4);
    
    private final int levelValue;
    
    LogLevel(int levelValue) {
        this.levelValue = levelValue;
    }
}
上述结构简化了级别比较逻辑,levelValue 越小,优先级越低,输出越频繁。若未正确设置根Logger级别,可能导致生产环境输出过多TRACE日志,造成I/O负载上升。
潜在风险清单
  • 未显式配置时依赖默认行为,易在不同环境间产生不一致
  • 低级别日志(如TRACE)误开启,可能暴露敏感信息
  • 自定义Appender未校验level值范围,引发逻辑判断偏差

2.3 分类变量在ggplot2中的映射逻辑解析

分类变量的自动识别与图形属性映射
ggplot2会自动识别数据框中因子(factor)或字符型变量为分类变量,并将其映射到图形属性(如颜色、形状、线型等)。这种映射通过aes()函数实现,系统依据类别水平生成离散的视觉元素。

library(ggplot2)
data <- data.frame(
  x = 1:6,
  y = c(2, 4, 6, 3, 5, 7),
  group = factor(rep(c("A", "B", "C"), each = 2))
)

ggplot(data, aes(x = x, y = y, color = group)) +
  geom_point(size = 3)
上述代码中,group被定义为因子变量,color = group指示ggplot2按组别赋予不同颜色。每个类别对应唯一的颜色值,图例自动生成。
映射逻辑的底层机制
ggplot2内部将分类变量转换为离散标度(discrete scale),并建立从因子水平到视觉参数的查找表。该机制确保即使数据顺序变化,同一水平始终映射到相同图形属性。

2.4 案例演示:未显式控制level导致的图表错序

在多层级数据可视化中,若未显式指定 `level` 参数,系统可能依据字段名排序自动分配层级,导致图表结构错乱。
问题复现代码

import pandas as pd
data = pd.DataFrame({
    'Region': ['North', 'South', 'East', 'West'],
    'Sales': [100, 150, 200, 130],
    'Quarter': ['Q1', 'Q1', 'Q2', 'Q2']
})
# 未指定 level,pandas 默认按列名字母序排列
pivot = pd.pivot_table(data, values='Sales', index='Region', columns='Quarter')
上述代码中,`columns='Quarter'` 未定义 `level`,当存在多个分类变量时,易引发轴对齐错误。
解决方案
  • 显式设置 level 参数以固定分组顺序
  • 使用 Categorical 类型预定义排序逻辑

2.5 factor与ordered factor对可视化的影响差异

在R语言的数据可视化中,`factor` 与 `ordered factor` 的类型选择直接影响分类变量的图形呈现顺序。普通 `factor` 按照因子水平(levels)的定义顺序排列,而 `ordered factor` 会保留其自然排序,常用于表示等级或阶段数据。
可视化顺序差异示例

# 创建普通factor与有序factor
status_factor <- factor(c("Low", "High", "Medium"), 
                        levels = c("Low", "Medium", "High"))
status_ordered <- ordered(c("Low", "High", "Medium"), 
                         levels = c("Low", "Medium", "High"))

# 查看排序行为
sort(status_factor)   # 输出按字母排序:"High", "Low", "Medium"
sort(status_ordered)  # 按预设levels排序:"Low", "Medium", "High"

代码中,factor 默认按字符串排序,破坏原始level设定;而 ordered() 强制保留语义顺序,在柱状图或箱线图中能正确反映变量层级。

图形输出对比
数据类型x轴显示顺序适用场景
factor任意(依levels定义)无序类别,如颜色、性别
ordered factor严格按levels顺序有序等级,如教育程度、满意度

第三章:基于factor函数的手动排序策略

3.1 使用factor()显式定义levels顺序

在R语言中,因子(factor)的水平(levels)默认按字母顺序排列,但在实际分析中,我们常常需要自定义顺序。使用 `factor()` 函数可显式指定 levels 顺序。
基本语法与参数说明

factor(x, levels = unique(x), labels = levels, ordered = FALSE)
其中:
  • x:输入向量;
  • levels:指定因子水平的顺序;
  • labels:为水平设置新标签(可选);
  • ordered:若为 TRUE,则生成有序因子。
示例:重定义教育水平顺序

edu <- c("High", "Low", "Medium", "Low", "High")
edu_factor <- factor(edu, levels = c("Low", "Medium", "High"))
此时因子水平按“Low → Medium → High”排序,符合逻辑递进,适用于有序分类分析。

3.2 利用levels参数重构分类变量显示逻辑

在数据可视化中,分类变量的显示顺序直接影响分析效率。默认情况下,分类轴的标签按字母顺序排列,但业务场景常需自定义排序。
控制分类显示顺序
通过 levels 参数可显式指定分类层级顺序。以 Python 的 altair 为例:

import altair as alt
import pandas as pd

data = pd.DataFrame({
    'stage': ['调研', '决策', '购买', '复购'],
    'count': [50, 30, 20, 10]
})

chart = alt.Chart(data).mark_bar().encode(
    x=alt.X('stage', sort=['调研', '决策', '购买', '复购']),
    y='count'
)
此处虽未直接使用 levels,但在 sort 中传入列表等效实现。在 R 的 forcats::fct_relevel() 中则明确支持 fct_relevel(stage, "调研", "决策", "购买", "复购"),重构因子水平,确保图表按业务流程展示。

3.3 实战演练:按业务需求定制x轴类别顺序

在数据可视化中,x轴类别的默认排序常为字母或数据录入顺序,但实际业务往往需要自定义排序以增强可读性。例如,将“低、中、高”优先级按语义顺序展示,而非字典序。
使用 Matplotlib 自定义类别顺序
import matplotlib.pyplot as plt
import pandas as pd

# 示例数据
data = {'priority': ['high', 'low', 'medium', 'low', 'high'], 'value': [8, 3, 5, 2, 9]}
df = pd.DataFrame(data)

# 定义自定义顺序
custom_order = ['low', 'medium', 'high']
df['priority'] = pd.Categorical(df['priority'], categories=custom_order, ordered=True)
df_sorted = df.sort_values('priority')

plt.bar(df_sorted['priority'], df_sorted['value'])
plt.xlabel('Priority Level')
plt.ylabel('Value')
plt.title('Custom Ordered X-axis Categories')
plt.show()
上述代码通过 pd.Categorical 显式设定类别顺序,categories 参数指定逻辑层级,确保图表按“低→中→高”正确呈现。此方法适用于非时间序列的有序分类变量,显著提升业务解读效率。

第四章:借助forcats包实现高效水平重排

4.1 加载forcats并使用fct_relevel调整特定位置

在R语言中处理分类变量时,`forcats`包提供了强大的因子操作工具。首先需要加载该包:
library(forcats)
此步骤确保后续函数可用。
调整因子水平顺序
使用 `fct_relevel()` 可手动指定因子中类别的顺序,对可视化和建模至关重要。例如:
gender <- factor(c("Male", "Female", "Other"))
gender_new <- fct_relevel(gender, "Other", "Female", "Male")
该代码将 `"Other"` 提升为第一水平,`"Female"` 为第二,其余按原序排列。参数中直接列出新顺序,未显式提及的水平保持原有相对顺序。
典型应用场景
  • 图表中自定义分类显示顺序
  • 回归模型中设定参考组
  • 确保报告输出的一致性

4.2 使用fct_inorder确保出现顺序即显示顺序

在处理因子变量时,类别顺序常影响模型解释与可视化布局。默认情况下,R 会按字母顺序排列因子水平,但这未必符合数据的实际语义顺序。
使用 fct_inorder 保持原始出现顺序
该函数来自 `forcats` 包,能将因子水平按其在数据中首次出现的顺序进行排列:

library(forcats)

# 示例数据
colors <- c("Yellow", "Blue", "Red", "Blue", "Yellow")

# 转为因子并保持首次出现顺序
colors_factor <- fct_inorder(colors)
levels(colors_factor)  # 输出: "Yellow" "Blue" "Red"
上述代码中,`fct_inorder` 捕获向量中元素的首次出现次序,避免了字母排序干扰。此方法特别适用于日志数据、用户行为序列等需保留时序语义的场景。
  • 输入向量中的唯一值按首次出现位置确定顺序;
  • 生成的因子可用于 ggplot2 绘图,确保图例与数据流一致;
  • 适用于分类变量重编码的预处理阶段。

4.3 fct_rev与fct_reorder在反向和数值关联排序中的应用

在因子水平的顺序调整中,`fct_rev` 与 `fct_reorder` 提供了灵活的排序机制。`fct_rev` 将因子水平按原有顺序逆序排列,适用于需要倒序展示分类变量的场景。
反向排序:fct_rev

library(forcats)
levels <- c("low", "medium", "high")
fac <- factor(levels, levels = levels)
fct_rev(fac)
# 输出: high, medium, low
该函数无参数配置,直接反转因子水平顺序,适用于标签语义递增但需视觉倒排的情况。
数值关联重排序:fct_reorder

data <- data.frame(
  category = c("A", "B", "C"),
  value = c(3, 1, 2)
)
data$category <- fct_reorder(data$category, data$value)
`fct_reorder(.f, .x)` 根据 `.x` 数值大小重新排列因子 `.f` 的水平,常用于条形图中使条形按值升序排列,提升可视化可读性。

4.4 综合案例:结合均值排序绘制有序条形图

在数据可视化中,有序条形图能更直观地展现类别间的差异。通过结合组内均值进行排序,可使图形呈现更具逻辑性的分布。
实现步骤
  • 按分类变量分组,计算每组目标变量的均值
  • 根据均值对分类变量重新排序
  • 使用排序后的顺序绘制条形图
import seaborn as sns
import matplotlib.pyplot as plt

# 按category计算value均值并排序
order = df.groupby('category')['value'].mean().sort_values(ascending=False).index
sns.barplot(data=df, x='value', y='category', order=order)
plt.show()
上述代码中,groupby 获取每类均值,sort_values 确定绘图顺序,order 参数传入Seaborn绘图函数,最终生成按均值降序排列的条形图,增强可读性与分析价值。

第五章:从数据预处理到可视化的最佳实践总结

统一数据格式与缺失值处理
在真实项目中,原始数据常包含不一致的日期格式和大量空值。例如,某电商平台用户行为日志中,`last_login` 字段存在 "2023/01/01" 与 "01-Jan-2023" 混用情况。使用 Pandas 统一转换:

import pandas as pd
df['last_login'] = pd.to_datetime(df['last_login'], infer_datetime_format=True)
df.fillna({'age': df['age'].median(), 'city': 'Unknown'}, inplace=True)
异常值检测与清洗策略
金融交易数据中,金额字段常出现极端离群值。采用 IQR 方法识别并处理:
  • 计算第一四分位数(Q1)与第三四分位数(Q3)
  • 确定边界:lower_bound = Q1 - 1.5 * IQR,upper_bound = Q3 + 1.5 * IQR
  • 将超出范围的值替换为边界值或标记为异常
特征编码与标准化流程
机器学习建模前需对类别变量进行编码。对于“商品类别”字段:
原始值One-Hot 编码后(示例)
Electronics1,0,0
Clothing0,1,0
数值型特征如“用户评分”应进行 Z-score 标准化:

from sklearn.preprocessing import StandardScaler
scaler = StandardScaler()
df['rating_scaled'] = scaler.fit_transform(df[['rating']])
可视化驱动洞察发现
使用 Matplotlib 和 Seaborn 构建分布图与热力图,快速识别变量间相关性。某次 A/B 测试中,通过箱线图发现新界面用户的会话时长中位数提升 23%,但上四分位数下降,提示部分用户群体体验恶化。
原始数据 → 数据清洗 → 特征工程 → 模型输入/可视化输出
ggplot2-设置坐标轴 本文在 http://www.cookbook-r.com/Graphs/Axes_(ggplot2)/ 的基础上加入了自己的理解基本箱线图library(ggplot2) bp ggplot(PlantGrowth, aes(x=group, y=weight)) + 阅读详情

相关推荐

GO富集分析可视化进阶——排序与分类的柱形图和棒棒糖图优化

本文深入探讨了GO富集分析可视化的进阶技巧,核心在于通过优化排序与分类提升柱形图和棒棒糖图的专业性与信息传达效率。文章详细解析了如何利用R语言中的因子(Factor)概念精确控制图形秩序,并结合ggplot2的分面、配色与多维度映射(如基因数、p值)等高级功能,将杂乱数据转化为清晰、美观且可用于出版的科研图表。

weixin_29047545的博客 357

如何让ggplot2按指定顺序排列分类轴?90%人都忽略的关键步骤

掌握ggplot2 factor 排序 levels的正确方法,轻松实现分类轴按指定顺序排列。适用于条形图、箱线图等场景,通过设置factor levels控制显示顺序,避免默认字母排序困扰。操作简单且效果精准,图表可视化必备技巧,值得收藏。

PixelWander的博客 1131

保姆级避坑指南:R中O2PLS模型结果提取与ggplot2可视化全流程(附导出PPT代码)

本文提供了一份详细的R语言O2PLS模型结果提取与ggplot2可视化指南,涵盖数据结构解析、数据清洗、高级整合技巧及专业图表美化方法。特别包含PPT自动化导出代码,帮助生物信息分析师高效完成学术图表制作,避免常见数据处理陷阱。

weixin_30650039的博客 505

【Claude技巧】effortLevel配置不生效的原因与正确设置

是合法配置项,但max是"仅当前会话有效"的级别,写在 settings.json 的字段里无法持久化,于是表现为"没生效"。想持久化max,应使用优先级最高的环境变量,在 settings.json 的env块中设置。配置优先级:环境变量 > settings.json >--effort标志 >/effort斜杠命令 > 模型默认。env 改动需重启会话生效,事后用/effort验证当前档位。effort 级别与扩展思考(等)是两套独立配置;与新版 effort 机制无关。

ShyanZh的博客 1799

ggplot2 facet实战:多维数据可视化空间调度指南

facet是ggplot2中实现多维数据分面可视化的底层机制,其核心原理在于为每个分类水平动态构建独立坐标系,从而解决异构量纲、多指标对比与跨维度分析等典型难题。相比单图归一化或手动分组绘图,facet通过scales='free_y'、space='free_x'等参数自动适配不同数据尺度,显著提升信息密度与认知效率。它广泛应用于经济指标横向对比、区域-指标交叉分析、时间序列多城市拆解等场景,是构建可解释性图表的关键技术支点。本文聚焦facet_wrap与facet_grid的工程化选型、长格式数据重塑规

culi4814的博客 383

浮点数加法器设计

一.设计内容及其要求 内容 根据浮点数的运算规则和IEEE754标准,实现浮点数的加法运算器。 要求: 浮点数格式:符号位1位,阶码8位,尾数23位 要求该实验能完整的体现浮点数的运算的五个步骤:对阶、尾数求和、规格化、舍入(要求使用对偶舍入)、溢出判断。 二.基本要素 浮点数 浮点数即实数,实数是所有有理数和无理数的集合。它之所以被称作浮点数,是因为小数点在数中的位置并不是固定的。一个浮点数值分为两部分存储:数值以及小数点在数值中的位置。 计算机中的浮点运算的计算结果一般是不确定的,一块芯片的浮点运算

Phoenix_ZengHao的博客 1万+

数据科学家私藏技巧:如何让ggplot2按指定顺序展示分类轴?(levels操控秘籍)

掌握ggplot2 factor排序技巧,轻松控制分类轴显示顺序。通过调整factor levels,实现条形图、箱线图等按指定顺序排列,适用于数据可视化中的类别排序需求。方法简单高效,提升图表可读性,数据科学家常用秘籍值得收藏。

FuncInk的博客 1047

similarity network fusion for aggregating data types on a genomic scale

基因组规模上的聚合数据类型的相似性网络融合 摘要:         近期的技术已经使收集不同类型的全基因组数据十分划算,结合这些数据去创建一个给定的疾病或生物过程的一个全面视图的计算方法是有必要的。相似网络融合(SNF:similarity network fusion)通过创建每一个可利用的数据类型的样本(如,患者)的网络可以解决这个问题。例如,创建一个给定一群患者疾病的全面视图,SNF计算

augustar学习笔记 7869

ggplot2中factor排序混乱怎么办?2个函数彻底解决类别显示顺序问题

解决ggplot2中factor排序混乱问题,通过reorder和fct_relevel函数精准控制levels顺序。适用于条形图、箱线图等类别变量排序场景,操作简单且效果直观,彻底掌握分类数据的显示逻辑,值得收藏。

codeink的博客 602

【电机控制入门】——电机控制书籍推荐

电机控制入门书籍推荐及分享 阅读须知: 1.电机控制的入门是涉及到机械、电子与控制等复杂交叉学习,它需要持续投入时间才可以看到学习的效果,如同“一万小时定律”。俗话说,九层之台,起于垒土,因此电机控制入门没有所谓的速成培训班。相反,还需要夯实好一定的基础。为此,博主建议从基础理论抓起,故推荐相关的书籍并分享给大家。 2.学习电机贵在动手实践,无论是借助于MATLAB/Simulink仿真平台来验证理论分析,或是使用板子对所设计的控制系统进行物理实现,博主极力推荐在一定基础(看完部分以下推荐的书籍),一边动手

昔时扬尘处 3万+

【无线通信】射频杂散(RF Spurious Emissions)

射频杂散(RF Spurious Emissions)是指在无线通信系统中,除了在指定频率范围内的预期信号之外,任何不需要的或非预期的射频信号。这些杂散信号可能会干扰其他通信系统,降低系统性能,并违反无线电通信法规。射频杂散通常包括谐波、次谐波、互调产物和其他非线性失真所产生的信号。

qq_38801607的博客 5425

【R语言绘图避坑手册】:factor levels顺序错乱?一文搞定ggplot2排序逻辑

解决ggplot2绘图中factor水平顺序错乱问题,掌握levels排序控制方法。适用于条形图、箱线图等需自定义分类顺序的场景,通过relevel或fct_reorder函数精准调整。一文理清排序逻辑,提升图表可读性,值得收藏。

BreakNexus的博客 903

大数据利器Hadoop:从基础到实战,一篇文章掌握大数据处理精髓!

在当今大数据时代,数据量的爆炸式增长对企业和技术提出了前所未有的挑战。如何高效地存储、处理和分析这些庞大的数据集,成为了亟待解决的问题。Hadoop作为一种分布式计算框架,应运而生,为大数据处理提供了有效的解决方案。Hadoop是一个由Apache软件基金会维护的开源项目,它基于Google的分布式文件系统(Google File System,GFS)和MapReduce计算模型设计。Hadoop的主要目标是处理大规模数据集,它可以在普通硬件集群上运行,从而降低了大数据处理的成本。

邓邓子的博客 8280

数据可视化必知技巧,如何正确设置ggplot2中factor的levels顺序?

掌握ggplot2 factor 排序 levels的正确方法,解决分类变量显示顺序错乱问题。适用于条形图、箱线图等场景,通过手动设置factor levels控制图表排序逻辑,提升可视化清晰度与专业性,数据呈现更直观有序,值得收藏。

PoliVein的博客 824

AI Agent开发第85课-DeepSeek-OCR 安装全指南:从 Transformers 到 vLLM,手把手教你跑通企业级 OCR

本文系统讲解 DeepSeek-OCR 的两种部署方式——基于 Hugging Face Transformers 的标准推理与基于 vLLM 的高性能加速推理。详细说明 CUDA 与 PyTorch 版本匹配、环境验证、依赖安装等关键细节,并提供可直接运行的完整代码示例。无论你是单卡调试还是高并发服务部署,都能在这里找到清晰路径。

打造全国最全的AI Agent开发知识领域的博客 2542

【企业智能体开发】优化模型成本、延迟与失败降级

小林的培训快开始时,服务台花很久“思考最优回答”,体验并不会更好。反过来,为了省钱而始终选最轻的模型,若连房间、连接方式和任务状态都识别不稳,后续错误检索和重复建单会造成更大代价。企业 Agent 的优化对象不是单次模型调用价格,而是任务在可接受时间内、安全地推进到正确结果的总成本。

Mr数据杨 893

factor levels顺序错乱导致图表失真?3分钟快速修复指南

解决ggplot2绘图时分类变量顺序错乱问题,掌握factor levels手动排序技巧。适用于条形图、箱线图等需自定义排序的场景,通过relevel或factor函数精准控制类别顺序,避免图表失真。方法简单高效,3分钟即可学会,值得收藏。

FuncWander的博客 925

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

掌握这3个函数,轻松玩转ggplot2的factor排序levels

掌握ggplot2的factor排序levels难题?本文详解reorder、fct_relevel和fct_infreq三个核心函数,适用于分类变量自定义顺序与统计排序场景。轻松实现条形图、箱线图等图形的因子顺序控制,提升可视化表达力,值得收藏。

AlgoChat的博客 672

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

R语言ggplot2排序陷阱(factor水平控制的终极解决方案)

掌握ggplot2 factor排序技巧,解决分类变量levels显示顺序错乱问题。适用于条形图、箱线图等需自定义排序的场景,通过手动设置factor水平控制图形顺序,实现精准可视化。方法简单高效,兼容性强,值得收藏。

ByteChat的博客 934

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

避坑指南:ggplot2热图标注时90%人会遇到的排序问题

本文深入解析ggplot2热图排序问题,揭示因子水平对标签排列的关键影响,并提供从基础到高级的解决方案。通过手动设置因子水平、动态排序技巧及实战案例,帮助生物信息学研究者精准控制热图标签顺序,避免90%用户常见的排序错误。

palm99的专栏 305

ggplot2绘制饼图:从数据准备到可视化进阶

数据可视化是数据分析的关键环节,它通过图形化手段揭示数据中的模式和趋势。在众多可视化工具中,ggplot2基于图形语法理论,通过图层叠加和数据映射构建图形,提供了高度的灵活性和一致性。其技术价值在于能够将复杂的数据关系转化为直观的视觉表达,广泛应用于商业分析、学术研究和数据报告等场景。本文聚焦于饼图的绘制,深入探讨了数据预处理、坐标转换和标签优化等核心步骤,并融入了极坐标系和分类变量处理等关键技术要点,帮助读者掌握从基础条形图到高级饼图变体的完整实现路径。

weixin_30896825的博客 362

R语言ggplot2直方图实战:从数据分布到业务洞察

直方图是理解数值型数据分布的基础可视化方法,其核心在于将原始数据映射为频数或密度的柱状结构,反映集中趋势、偏态与异常值。ggplot2通过分层语法(数据层+几何层+装饰层)实现逻辑清晰、可复现的绘图流程,显著优于base R的hist()等传统方案。它支持灵活的分箱控制(bins/binwidth/boundary)、统计线叠加(均值/中位数)、分组着色(fill)与分面分析(facet_grid),特别适用于房价、用户时长、订单金额等现实业务场景中的分布诊断。结合tidyverse生态,可无缝融入数据清洗

weixin_34315485的博客 325

数据可视化进阶:掌握线图颜色顺序原理与实战定制

在数据可视化领域,颜色作为一种核心的视觉编码通道,其作用远不止于美化图表。颜色循环是绘图库的底层机制,它按照预设顺序将色彩映射到数据序列。理解这一原理对于提升图表的可读性与沟通效率至关重要。从视觉感知角度看,颜色顺序直接影响信息层级与分组认知,合理的顺序能引导视线、强化重点,反之则会增加认知负担。其技术价值在于,通过定制颜色顺序,可以精准控制数据叙事,使图表从“正确”迈向“清晰有力”。在工程实践中,无论是进行多类别趋势对比、突出核心曲线,还是表达数据的顺序关系,都需要匹配不同的颜色顺序策略。本文聚焦于线图颜

weixin_33831196的博客 690

R语言ggplot2绘制生物信息学气泡图:从数据清洗到出版级可视化

数据可视化是生物信息学分析中从海量数据中提取洞察的关键环节。气泡图作为一种高效的多维数据编码工具,能够同时展示数据的显著性、影响程度和类别信息,其核心原理在于通过点的位置、大小和颜色映射多个变量。在生物信息学领域,这种技术对于解读GO富集分析、KEGG通路富集等高通量测序下游结果具有重要价值,能直观呈现功能条目的富集因子、基因数量和统计显著性。掌握基于R语言ggplot2生态系统的可定制化绘图方法,不仅能提升科研图表的质量与可复现性,更能满足学术出版对可视化细节的严格要求。本文以GO/KEGG富集分析为典型

weixin_30861797的博客 301

ggplot2实战精修:5类业务图表的分层构建与交付级优化

ggplot2不是语法练习工具,而是基于统计图形语法(Grammar of Graphics)的工程化可视化系统。其核心在于数据、映射、几何、统计、坐标、主题六层解耦设计,确保图表具备可复用性、可追溯性与可组合性。理解图层叠加逻辑(而非画布覆盖)能避免时间序列错连、图例混乱、坐标偏移等高频故障;掌握scale_x_date()、position_jitterdodge()、geom_sf()等关键组件的参数原理,可精准控制时间轴标注、分布图对齐、地理热力渲染。本文聚焦真实业务场景——多周期趋势对比、多组分布

weixin_30439067的博客 337
上一篇: 【R Shiny交互设计进阶指南】:掌握tabsetPanel selected参数的5种高级用法
下一篇: Dify平台OAuth认证避坑指南:资深架构师的7条黄金建议
FastCompile
博客等级 码龄1年 164粉丝 2015原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值