java归一化方法_Java之Normalizer(归一化)
什么是歸一化?
歸一化的概念在人工智能領域會普通看到, 比如使用TensorFlow框架編碼時,就會出現數據歸一化的步驟或函數。
簡單來說, 歸一化就是對一組數據進行轉換,使這組數據具備相同的格式或特性。舉例來說: 一組任意的整數數組:1,2,400,5000, 如果每個數都除以這組元素中的最大值的話(這里是5000),則這個數組元素的值位于0-1之間,滿足數學上概率的值的區間。
在AI中,對培訓數據進行歸一化的好處有:
1、保持合適的樣本間距
以上面的示例來說, 1和5000相差甚遠,如果以坐標圖繪制,則相差的太遠, 歸一化之后就好多了。
2、平等對待多個特征向量。
有個例子示房子面積和房子的數量對房價的影響。面積的體量明顯大于房子的數目,面積的因素很容易掩蓋數量的影響。所以,歸一化之后,更容易找到問題的解。
歸一化的數學方法
歸一化常見的數學方法有:
線性歸一化
也稱作(0,1)標準化 線性歸一化 , Min-Max標準化和離差標準化。是對原始數據進行線性變換,變換后的結果值在0到1之間。
公式是: X = (x-Min)/(Max-Min)
均值標準差歸一化
使用均值和標準差進行數據的標準化。轉換后的數據符合正態分布, 即均值為0, 標準差為1。
公式是:X= x-均值/標準差
Sigmoid函數歸一化
Java歸一化類Normalizer
JDK中提供了一個歸一化類:java.text.Normalizer , 和傳統的歸一化有點區別, 這個類主要是對字符串編碼的轉換。從該類的包名也可以看出,這個類處理的是文本的數據。
為什么會有編碼的問題呢? 這個還要從計算機的原理說起, 計算機中使用1表示高電平,使用0表示低電平,簡單點理解就是電源要么開,要么關。
ASCII碼應該是最早熟悉的字符編碼了,(American Standard Code for Information Interchange): 美國信息交換標準代碼,其實用的是8個比特位(1)個字節來表示拉丁字母以及一些特殊字符,但是8個比特位最多能有256種表示方式(比如0100 0001 表示大寫的A, 換算成十進制是65,十六進制表示是0x41),但是漢字等有成千上百個,于是出現了 GB2312、GBK、Unicode等編碼。
Unicode(統一碼、萬國碼、單一碼),是業界統一的標準,該標準更多兩個字節來表示字符(最多可以表示65536個字符)。 但這個標準又有不同的版本,比如UTF-8、UTF-16和UTF-32。同一個字符可能出現不同的編碼方式。
比如 á (小寫a上面有一個第四聲),就有兩種編碼方式:
編碼方式1:00C1 , 一個字符表示
編碼方式2:0041+0301 , 兩個字符表示
雖然同是á , 但是在Java中進行字符串匹配是不相同的, 所以需要進行歸一化處理。 示例代碼如下:
public class NormalizerTest {
// á
@Test
public void base() {
// 歸一化前
String str1 = "\u00C1";
System.out.println(str1);
String str2 = "\u0041" + "\u0301";
System.out.println(str2);
// Assert.assertTrue(str1.equals(str2)); //失敗
// 歸一化后
str1 = Normalizer.normalize(str1, Normalizer.Form.NFC);
str2 = Normalizer.normalize(str2, Normalizer.Form.NFC);
System.out.println(str1);
System.out.println(str2);
Assert.assertTrue(str1.equals(str2)); // 成功
}
}
normalize()方法有兩個參數:
第一個參數是需要歸一化的字符串
第二個參數是Unicode規范化的類型,該類型參數有四種:
NFD 典型分解
NFC 兼容性分解
NFKD 規范分解,規范組成
NFKC 兼容性分解,規范組成
NF 是normalization-type的簡寫。
類型細節參考:
http://www.unicode.org/reports/tr15/tr15-23.html
Java的Normalizer類的說明參考:
https://docs.oracle.com/javase/7/docs/api/java/text/Normalizer.html
總結
以上是生活随笔為你收集整理的java归一化方法_Java之Normalizer(归一化)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: BookChat学习软件—(面向程序员的
- 下一篇: 一个android文本比对app的实现(