OneHotEncoder
是用於將類別型特徵轉換為獨熱編碼的類。獨熱編碼是一種常用的特徵編碼方式,特別適用於處理類別型特徵,將其轉換為數值型特徵。
對於每個類別型特徵,OneHotEncoder 將其編碼成一個長度為類別數量的向量。
每個類別對應一個維度,如果樣本的該特徵值為該類別,則對應維度置1,其他維度置0。
範例:
List <Row> df = Arrays.asList(
Row.of("a", 1),
Row.of("b", 1),
Row.of("c", 1),
Row.of("e", 2),
Row.of("a", 2),
Row.of("b", 1),
Row.of("c", 2),
Row.of("d", 2),
Row.of(null, 1)
);
BatchOperator <?> inOp = new MemSourceBatchOp(df, "query string, weight int");
OneHotEncoder one_hot = new OneHotEncoder().setSelectedCols("query").setEncode(Encode.VECTOR);
// 或者單獨設定輸出列
// OneHotEncoder one_hot = new OneHotEncoder().setSelectedCols("query").setOutputCols("output");
one_hot.fit(inOp).transform(inOp).print();
輸出結果如下所示:
query | weight |
---|---|
$5$0:1.0 | 1 |
$5$1:1.0 | 1 |
$5$2:1.0 | 1 |
$5$ | 2 |
$5$0:1.0 | 2 |
$5$1:1.0 | 1 |
$5$2:1.0 | 2 |
$5$3:1.0 | 2 |
$5$4:1.0 | 1 |
VectorAssembler
是用於將多列特徵合併為單列特徵向量的類。它將多個特徵列的值合併為一個特徵向量,通常用於特徵工程的最後階段,以準備機器學習模型的輸入特徵。
對於每個樣本,VectorAssembler 將選定的特徵列的值合併成一個特徵向量。特徵向量的維度等於選定的特徵列數,每個維度對應一個特徵列的值。
合併的特徵列僅支援數值型別。
範例:
List <Row> df = Arrays.asList(
Row.of("0", "$6$1:2.0 2:3.0 5:4.3", "3.0 2.0 3.0"),
Row.of("1", "$8$1:2.0 2:3.0 7:4.3", "3.0 2.0 3.0"),
Row.of("2", "$8$1:2.0 2:3.0 7:4.3", "2.0 3.0 2.2")
);
MemSourceBatchOp data = new MemSourceBatchOp(df, "id string, c0 string, c1 string");
VectorAssembler res = new VectorAssembler()
.setSelectedCols("c0", "c1")
.setOutputCol("table2vec");
res.transform(data).print();
輸出結果如下所示:
id | c0 | c1 | table2vec |
---|---|---|---|
0 | $6$1:2.0 2:3.0 5:4.3 | 3.0 2.0 3.0 | $9$1:2.0 2:3.0 ... 8:3.0 |
1 | $8$1:2.0 2:3.0 7:4.3 | 3.0 2.0 3.0 | $11$1:2.0 2:3.0 ... 10:3.0 |
2 | $8$1:2.0 2:3.0 7:4.3 | 2.0 3.0 2.2 | $11$1:2.0 2:3.0 ... 10:2.2 |
FeatureHasher
是用於將多列特徵進行雜湊對映,將特徵合併成特徵向量的類。
對於每個樣本,將選定的特徵列的值進行雜湊對映,得到特徵向量的維度。每個特徵列的值經過雜湊函數對映到特徵向量的對應維度,形成一個特徵向量。
這種方式可以降低特徵維度,減少記憶體和計算資源的消耗,尤其適用於高維稀疏特徵。
不限於數值型別的資料
範例:
List<Row> df1 = Arrays.asList(
Row.of(1.1, true, 2, "A"),
Row.of(1.1, false, 2, "B"),
Row.of(1.1, true, 1, "B"),
Row.of(2.2, true, 1, "A")
);
BatchOperator <?> inOp = new MemSourceBatchOp(df1, "double double, bool boolean, number int, str string");
FeatureHasher binarizer = new FeatureHasher().setSelectedCols("double", "bool", "number", "str").setOutputCol("output").setNumFeatures(3);
輸出結果如下所示:
double | bool | number | str | output |
---|---|---|---|---|
1.1000 | true | 2 | A | $3$0:3.0 1:1.1 2:1.0 |
1.1000 | false | 2 | B | $3$0:3.0 1:1.1 2:1.0 |
1.1000 | true | 1 | B | $3$0:2.0 1:1.1 2:1.0 |
2.2000 | true | 1 | A | $3$0:2.0 1:2.2 2:1.0 |
DocCountVectorizer
用於將文字資料轉換為文字特徵向量。它主要適用於文字資料的特徵抽取和處理,以便進一步用於機器學習模型的訓練和預測。主要用於自然語言處理(NLP)任務,如文字分類、情感分析、主題建模等。
特徵抽取過程:
對於每個文字資料,DocCountVectorizer
統計每個詞彙在文字中的出現次數,作為特徵向量的值。
每個文字對應一個特徵向量,特徵向量的維度為詞彙表的大小。
Alink庫封裝的DocCountVectorizer
支援生成多種型別的特徵向量,支援IDF/WORD_COUNT/TF_IDF/Binary/TF。預設是WORD_COUNT特徵型別,即單詞出現的頻率。
範例:
List <Row> df = Arrays.asList(
Row.of(0, "二手舊書:醫學電磁成像"),
Row.of(1, "二手美國文學選讀( 下冊 )李宜燮南開大學出版社 9787310003969"),
Row.of(2, "二手正版圖解象棋入門/謝恩思主編/華齡出版社"),
Row.of(3, "二手中國糖尿病文獻索引"),
Row.of(4, "二手郁達夫文集( 國內版 )全十二冊館藏書")
);
BatchOperator <?> inOp = new MemSourceBatchOp(df, "id int, text string");
Pipeline pipeline = new Pipeline()
.add(new Segment().setSelectedCol("text")) // 分詞
.add(new DocCountVectorizer().setFeatureType("TF_IDF").setSelectedCol("text").setOutputCol("vec"));
pipeline.fit(inOp).transform(inOp).print();
輸出結果如下所示:
id | text | vec |
---|---|---|
0 | 二手 舊書 : 醫學 電磁 成像 | $37$10:0.1831020481113516 14:0.1831020481113516 ... 34:0.1831020481113516 |
1 | 二手 美國 文學 選讀 ( 下冊 ) 李宜燮 南開大學 出版社 9787310003969 | $37$0:0.04077336356234972 1:0.04077336356234972 ... 35:0.06462425227459469 |
2 | 二手 正版 圖解 象棋 入門 / 謝恩 思 主編 / 華齡 出版社 | $37$5:0.0915510240556758 6:0.0915510240556758 ... 36:0.1831020481113516 |
3 | 二手 中國 糖尿病 文獻 索引 | $37$8:0.21972245773362198 9:0.21972245773362198 ... 32:0.21972245773362198 |
4 | 二手 郁達夫 文集 ( 國內 版 ) 全 十二冊 館藏 書 | $37$0:0.046209812037329684 1:0.046209812037329684 ... 30:0.07324081924454065 |
DocHashCountVectorizer
將文字資料中的每個詞彙通過雜湊函數對映到特徵向量的維度,得到特徵向量。
特徵向量的維度由使用者設定的引數 numFeatures
決定,通常較小以減少維度。
範例:
List <Row> df = Arrays.asList(
Row.of(0, "二手舊書:醫學電磁成像"),
Row.of(1, "二手美國文學選讀( 下冊 )李宜燮南開大學出版社 9787310003969"),
Row.of(2, "二手正版圖解象棋入門/謝恩思主編/華齡出版社"),
Row.of(3, "二手中國糖尿病文獻索引"),
Row.of(4, "二手郁達夫文集( 國內版 )全十二冊館藏書")
);
BatchOperator <?> inOp = new MemSourceBatchOp(df, "id int, text string");
Pipeline pipeline = new Pipeline()
.add(new Segment().setSelectedCol("text"))
.add(new DocHashCountVectorizer().setFeatureType("TF_IDF").setSelectedCol("text").setOutputCol("vec").setNumFeatures(3));
pipeline.fit(inOp).transform(inOp).print();
輸出結果如下所示:
id | text | vec |
---|---|---|
0 | 二手 舊書 : 醫學 電磁 成像 | $3$0:-0.7331685343967134 1:-0.5207269374140805 |
1 | 二手 美國 文學 選讀 ( 下冊 ) 李宜燮 南開大學 出版社 9787310003969 | $3$0:-0.776296095243579 1:-0.24504797054780258 2:-0.21559781926450705 |
2 | 二手 正版 圖解 象棋 入門 / 謝恩 思 主編 / 華齡 出版社 | $3$0:-0.7331685343967134 1:-0.17357564580469348 2:-0.30543024395805163 |
3 | 二手 中國 糖尿病 文獻 索引 | $3$0:-0.2932674137586854 1:-0.4165815499312644 2:-0.366516292749662 |
4 | 二手 郁達夫 文集 ( 國內 版 ) 全 十二冊 館藏 書 | $3$0:-0.5865348275173707 1:-0.34715129160938696 2:-0.24434419516644132 |
Word2Vec是Google在2013年開源的一個將詞表轉為向量的演演算法,其利用神經網路,可以通過訓練,將詞對映到K維度空間向量,它主要用於將單詞表示成高維空間中的向量,以便能夠在計算機上更好地處理自然語言文字。Word2Vec 提供了一種有效的方式來捕獲單詞之間的語意關係,這對於自然語言處理任務非常有用。
Word2Vec有兩種主要模型:Skip-gram和Continuous Bag of Words (CBOW)。
Skip-gram模型是預測上下文單詞,而CBOW模型是預測中心單詞。
範例:
List <Row> df = Arrays.asList(
Row.of("A B C")
);
BatchOperator <?> inOp = new MemSourceBatchOp(df, "tokens string");
Word2Vec word2vec = new Word2Vec().setSelectedCol("tokens").setMinCount(1).setVectorSize(2).setOutputCol("vec");
word2vec.fit(inOp).transform(inOp).print();
輸出結果如下所示:
tokens | vec |
---|---|
A B C | 0.7309789158041142 0.40841706187852966 |
我的部落格即將同步至騰訊雲開發者社群,邀請大家一同入駐:https://cloud.tencent.com/developer/support-plan?invite_code=11e2afjwefnzt