寫一個算法對一組值進行歸一化映射,使它們在視覺上有明顯的區分度,尤其在數據集分布不均時仍能體現差異

問題:

有一批數據,都是隨機值范圍是不確定,我需要用這個值來繪制同樣數量圓,不同值他們的圓半徑不同,考慮到數據有時候大小偏差不大,這1000個值有可能是集中在10,20之間,也可能是分布廣泛,需要寫一個算法來充分表達他們的值大小不同,返回一個比例0~100%  是的明顯能看出他們的差異

思路分析
我們需要將數據映射成一個“可視化感知上明顯”的比例(0~100%),用于設置圓的半徑:

常規 min-max 歸一化(線性映射)在數據集中分布集中時(例如 10~20)表現不佳。 對數歸一化(log
scale)可以有效地“拉開”分布較集中的數據。

分位數歸一化(Quantile) 也可以作為備選方案。

我們采用一種混合策略:

先判斷數據的極差(max - min)是否很小,如果小則采用 對數歸一化; 如果分布廣泛則使用 min-max 線性歸一化; 最終值映射為
0~100,用于繪制大小。

using System;
using System.Collections.Generic;
using System.Linq;public class CircleScaler
{/// <summary>/// 對輸入的值進行歸一化處理,輸出 0~100 之間的比例,用于繪制圓半徑/// </summary>public static List<double> GetAdaptiveRadiusScales(List<double> values){if (values == null || values.Count == 0)return new List<double>();double min = values.Min();double max = values.Max();double range = max - min;double avg = values.Average();double stdDev = Math.Sqrt(values.Average(v => Math.Pow(v - avg, 2)));List<double> result;// 集中度判斷(標準差小于極差的10%)bool isConcentrated = stdDev < range * 0.1;if (isConcentrated){// 使用對數歸一化,適合差異較小的數據double logMin = Math.Log(min + 1);double logMax = Math.Log(max + 1);double logRange = logMax - logMin;result = values.Select(v =>{double logVal = Math.Log(v + 1);return ((logVal - logMin) / logRange) * 100.0;}).ToList();}else{// 使用線性歸一化 + 差異增強(平方)result = values.Select(v =>{double norm = (v - min) / range;double enhanced = Math.Pow(norm, 1.2); // 可調指數,越大差異越明顯return enhanced * 100.0;}).ToList();}return result;}public static void Main(){var set1 = new List<double> { 10, 12, 11, 13, 15 };  // 集中型var set2 = new List<double> { 3, 50, 300, 800, 1000 }; // 廣泛型var set3 = new List<double> { 0, 100, 500, 600, 700, 10000 }; // 極端型Console.WriteLine("【集中型】");PrintScales(GetAdaptiveRadiusScales(set1));Console.WriteLine("\n【廣泛型】");PrintScales(GetAdaptiveRadiusScales(set2));Console.WriteLine("\n【極端型】");PrintScales(GetAdaptiveRadiusScales(set3));}private static void PrintScales(List<double> scales){foreach (var s in scales){Console.Write($"{s:F2}%  ");}}
}

輸出示例:

【集中型】
0.00% 57.54% 28.77% 83.56% 100.00%

【廣泛型】
0.00% 2.35% 15.46% 58.64% 100.00%

【極端型】
0.00% 0.46% 4.35% 6.88% 9.14% 100.00%

策略說明
線性歸一化標準分布適用,保持相對比例
對數歸一化值集中、小范圍有效
指數增強(pow)加強視覺對比度(1.2 ~ 2.0)
自動判斷(集中 vs 廣泛)通過標準差與極差比,自動選擇策略

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/91108.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/91108.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/91108.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

具身智能零碎知識點(五):VAE中對使用KL散度的理解

VAE中對使用KL散度的理解什么是 VAE (Variational AutoEncoder)&#xff1f;從自編碼器 (AE) 說起VAE&#xff1a;讓潛在空間變得“有意義”和“連續”KL 散度是如何用到的&#xff1f;通俗理解 KL 散度在 VAE 中的作用&#xff1a;帶來的好處&#xff1a;KL 散度公式 (無需背誦…

理解:進程、線程、協程

線程、進程和協程是并發編程的重要組成部分。進程&#xff08;Process&#xff09;定義進程是操作系統分配資源的基本單位&#xff0c;表示一個正在執行的程序。一旦一個程序被加載到內存中&#xff0c;它就成為一個進程&#xff0c;而每個進程都有其獨立的內存空間。特征進程之…

總結一下找素數的三種方法

目錄 一試除法 二埃氏篩 三線性篩(歐拉篩) 一試除法 思想&#xff1a;就是判斷某個數x是不是素數,就判斷從2開始到小于根號x的范圍內有沒有能夠取余不等于0的,這個說明當前值就是x的一個因子&#xff0c;所以不是素數。 代碼&#xff1a; import java.util.Scanner;public…

基于Yolov8車輛檢測及圖像處理系統【有代碼】

0 引言 隨著城市化進程的加速和機動車保有量的快速增長,交通管理、智能監控和自動駕駛等領域對車輛目標檢測技術的需求日益增長。車輛目標檢測是計算機視覺領域的一個重要研究方向,其目標是從圖像或視頻序列中準確識別和定位車輛,為后續的車輛跟蹤、行為分析和交通流量統計…

MySQL密碼管理器“mysql_config_editor“

目錄 核心能力 常用命令速查 為什么更安全&#xff1f; 典型場景 mysql_config_editor 是 MySQL 官方自帶的一款命令行小工具&#xff0c;作用一句話&#xff1a;把賬號、密碼、主機、端口等連接信息加密存起來&#xff0c;下次連接時只敲一個名字即可&#xff0c;不用再寫…

Kubernetes高級調度01

目錄 第一章&#xff1a;初始化容器&#xff08;InitContainer&#xff09;—— 應用啟動前的 “準備軍” 1.1 InitContainer 的基本概念與核心特性 1.2 InitContainer 與普通容器的關鍵區別 1.3 InitContainer 的實戰場景與示例解析 1.3.1 示例 1&#xff1a;延遲啟動 —…

LSV負載均衡

什么是訪問壓力&#xff1f;--負載 兩個客戶同時訪問一個服務器&#xff0c;會導致服務器崩潰調度---Cluster集群&#xff08;為了解決一個特定問題&#xff0c;多臺服務器組合使用形成的一個系統&#xff09;LSV 1、集群Cluster LB&#xff1a;負載均衡&#xff0c;有多個主機…

復習筆記 38

緒論 其實沒有一種安穩快樂&#xff0c;永遠也不差 專題 2 知識點 繼續學數學強化吧&#xff1f;可以。還有概率論要學。還有高數后半部分的數一專項要學。還有政治要學。要學的內容確實還是挺多的啊。加油。下載了一個閱讀的軟件&#xff0c;可以做一做真題的閱讀理解。政治英…

GaussDB like 的用法

1 like 作用在 where 子句中使用 like 運算符來搜索列中的指定模式。 有兩個通配符與 like 運算符一起使用&#xff1a;&#xff05; - 百分號表示零個&#xff0c;一個或多個字符 _ - 下劃線表示單個字符注&#xff1a;也同時支持正則表達式。2 like 語法select column1, colu…

單例模式:確保全局唯一實例

單例模式確保一個類只有一個實例&#xff0c;并提供全局訪問點。適用于需要全局唯一對象的場景&#xff08;如配置管理器、數據庫連接池&#xff09;。代碼示例&#xff1a;import java.util.stream.IntStream;public class ConfigManager {public static void main(String[] a…

深入理解 QSettings:Qt 中的應用程序配置管理

在開發 Qt 應用程序時&#xff0c;管理應用程序的配置信息是一個常見的需求。無論是保存用戶的偏好設置、窗口大小&#xff0c;還是應用程序的運行時配置&#xff0c;都需要一種高效且靈活的方式來存儲和檢索這些信息。Qt 提供了一個強大的工具——QSettings&#xff0c;它能夠…

基于SpringBoot+Vue的體育館預約管理系統(支付寶沙盒支付、騰訊地圖API、協同過濾算法、可視化配置、可視化預約)

“ &#x1f388;系統亮點&#xff1a;支付寶沙盒支付、騰訊地圖API、協同過濾算法、可視化配置、可視化預約”01系統開發工具與環境搭建—前后端分離架構 項目架構&#xff1a;B/S架構 運行環境&#xff1a;win10/win11、jdk17前端&#xff1a; 技術&#xff1a;框架Vue.js&am…

<script>標簽對HTML文件解析過程的影響以及async和defer屬性的應用

在前端開發中&#xff0c;<script> 標簽的 async 和 defer 屬性會顯著影響 JavaScript 腳本的加載和執行時機。下面結合示例代碼&#xff0c;詳細解析它們之間的區別&#xff1a; 1. 默認情況&#xff08;無 async/defer&#xff09; <script src"script.js"…

Vue.js:從 Web 到桌面的跨端實踐與技術選型指南

一、Vue.js 的核心能力邊界 作為漸進式 JavaScript 框架,Vue.js 的核心價值在于構建現代 Web 用戶界面: ? 前端核心場景:單頁應用(SPA)、動態交互界面、可復用組件開發 ? 架構限制:無法直接改造 B/S(瀏覽器/服務器)為 C/S(客戶端/服務器)架構 關鍵差異:B/S 依賴瀏…

SSRF11 各種限制繞過之DNS rebinding 繞過內網 ip 限制

ssrf漏洞在廠商的處理下可能進行一些特殊處理導致我們無法直接利用漏洞 有以下四種&#xff1a; 1.ip地址限制繞過 2.域名限制繞過 3.30x跳轉繞過域名限制 4.DNS rebinding繞過內網ip限制 本章我們講DNS rebinding 繞過內網 ip 限制 DNS rebinding 繞過內網 ip 限制 假…

FreeRTOS之鏈表操作相關接口

FreeRTOS之鏈表操作相關接口1 FreeRTOS源碼下載地址2 任務控制塊TCB2.1 任務控制塊TCB2.1.1 任務控制塊的關鍵成員2.1.2 TCB 的核心作用2.2 ListItem_t2.3 List_t3 函數接口3.1 vListInitialise3.2 vListInitialiseItem1 FreeRTOS源碼下載地址 https://www.freertos.org/ 2 …

項目一第一天

目錄 總結MySQL&#xff1a; 最終還是得按照SQL的語法來實施。 1、MySQL的數據類型&#xff1a;指業務數據按照什么格式存儲在數據庫中的。 任何數據類型最常見的三種&#xff1a;字符串、整型和小數型。 如&#xff1a;寶貝計劃這種存在視頻的項目&#xff0c;你們的視頻是存放…

STM32第二十天 ESP8266-01S和電腦實現串口通信(3)

1&#xff1a;透傳透傳&#xff08;又稱透明傳輸&#xff09;是一種通信模式&#xff0c;其核心特點是&#xff1a;通信設備對傳輸的數據不做任何解析或處理&#xff0c;僅作為“管道”原封不動地轉發數據&#xff0c;仿佛數據“透明”地穿過設備。透傳的本質關鍵特征說明無協議…

微服務引擎 MSE 及云原生 API 網關 2025 年 3 月產品動態

點擊此處&#xff0c;了解微服務引擎 MSE 產品詳情。

在 Docker 上安裝和配置 Kafka、選擇用于部署 Kafka 的操作系統

消息代理是一種軟件&#xff0c;充當在不同應用程序之間發送消息的中介。它的功能類似于服務器&#xff0c;從一個應用程序&#xff08;稱為生產者&#xff09;接收消息&#xff0c;并將其路由到一個或多個其他應用程序&#xff08;稱為消費者&#xff09;。消息代理的主要目的…