官术网_书友最值得收藏!

1.3.6 因子

一般而言,屬性的衡量尺度分成名目尺度(nominal scale)、順序尺度(ordinal scale)、區(qū)間尺度(interval scale)與比例尺度(ratio scale)。名目尺度數(shù)據(jù)表示群或類別,僅能進(jìn)行是否相等的運(yùn)算,如身份證號(hào)碼、眼色、郵政編碼等。順序尺度數(shù)據(jù)順序有別,大小比較的排序是有意義的,如排名、年級(jí),或者是以高大、中等或矮小來(lái)表示高度的衡量值。區(qū)間尺度數(shù)據(jù)可自定義任意零點(diǎn),零以下還有負(fù)值,以加減計(jì)算差值或距離有意義,如日期、攝氏度或華氏溫度。比例尺度數(shù)據(jù)有自然零點(diǎn),或稱絕對(duì)零點(diǎn),沒(méi)有負(fù)值,乘除運(yùn)算產(chǎn)生的比率有意義,如開(kāi)氏(Kelvin)溫度、長(zhǎng)度、耗時(shí)、次數(shù)等。

名目尺度屬性又稱為類別變量(此后屬性、特征、變量與變項(xiàng)會(huì)交替使用),順序尺度又稱為有序的類別變量,在R語(yǔ)言中兩者都稱為因子(factor),是R語(yǔ)言非常重要的一個(gè)類別,它決定數(shù)據(jù)如何被分析與可視化,例如,分類問(wèn)題建模時(shí)因變量必須為因子類別,又可視化時(shí)因子變量會(huì)按照其頻率分布(frequency distribution)產(chǎn)生直方圖與圓餅圖等。下例中函數(shù)factor()將字符串向量中的類別值對(duì)應(yīng)到[1,2,…,k]的整數(shù)值向量,其中k為名目變量中獨(dú)特值的個(gè)數(shù),統(tǒng)計(jì)術(shù)語(yǔ)稱為水平數(shù)(number of levels),名目變量的各個(gè)獨(dú)特值即為各水平(level)。因此,字符串向量與整數(shù)值的因子向量間有一對(duì)應(yīng)關(guān)系,默認(rèn)的對(duì)應(yīng)關(guān)系中字符串與整數(shù)值分別按照字母順序與大小升冪排列。以前面五位患者其糖尿病類型的字符串向量diabetes為例,轉(zhuǎn)換為因子向量的做法如下:

對(duì)于有序的類別變量,可在factor()函數(shù)中設(shè)定ordered的參數(shù)值為T(mén)RUE,形成R語(yǔ)言有序因子(ordered factor)對(duì)象。但此處患者康復(fù)狀況的類別值字母順序?yàn)镋xcellent, Improved與Poor,所以須用levels參數(shù)強(qiáng)制設(shè)定兩者的對(duì)應(yīng)關(guān)系如下(1=Poor,2=Improved,3=Excellent),表達(dá)數(shù)值越高,復(fù)原狀況越好。總結(jié)來(lái)說(shuō),因子變量的模式(mode)是數(shù)值的,但外表看來(lái)像字符串,如此貼心的設(shè)計(jì)是R語(yǔ)言特有的,Python語(yǔ)言需要自行編碼(參見(jiàn)1.4.3節(jié)Python語(yǔ)言類別變量編碼)。

前述因子的編碼方式,是所謂的標(biāo)簽編碼(label encoding)。另一種常用的編碼方式單熱編碼(onehot encoding)虛擬編碼(dummy encoding)相似,將原本單一的類別變量編碼成多個(gè)互相獨(dú)立的二元類別變量(independent binary categories)。此處以套件{vcd}中的關(guān)節(jié)炎Arthritis數(shù)據(jù)集為例,使用單熱編碼套件{onehot}先建立模型對(duì)象encoder,其類別值為onehot,再使用predict()泛型函數(shù)對(duì)Treatment與Sex兩字段進(jìn)行單熱編碼,最后再與未做單熱編碼的三個(gè)字段整合為數(shù)據(jù)集arthritisOh。因?yàn)門(mén)reatment與Sex均為兩水平的因子變量,整合后的表格共有7個(gè)(3未單熱編碼+2水平單熱編碼+2水平單熱編碼)變量。此處{onehot}套件單熱編碼過(guò)程與R語(yǔ)言機(jī)器學(xué)習(xí)建模過(guò)程相同,也是1.6.2節(jié)中Python語(yǔ)言模型擬合過(guò)程的精簡(jiǎn)版,請(qǐng)參考該節(jié)內(nèi)容及后面的建模案例。

總結(jié)來(lái)說(shuō),R語(yǔ)言的前身S語(yǔ)言是數(shù)據(jù)分析語(yǔ)言與統(tǒng)計(jì)運(yùn)算(statistical computing)環(huán)境的先驅(qū),大多數(shù)的情況下它們會(huì)將數(shù)據(jù)表中的字符串變量自動(dòng)編碼成因子變量,例如,read.csv()函數(shù)也可以通過(guò)stringsAsFactors參數(shù)的設(shè)定,自動(dòng)完成標(biāo)簽編碼,方便后續(xù)的統(tǒng)計(jì)計(jì)算。然而Python語(yǔ)言并非如此,許多Python套件并無(wú)這種自動(dòng)轉(zhuǎn)換的功能,數(shù)據(jù)導(dǎo)入Python后,通常須先進(jìn)行類別變量編碼的動(dòng)作。想同時(shí)使用R語(yǔ)言和Python語(yǔ)言的數(shù)據(jù)分析工作者請(qǐng)注意這種差異,以免導(dǎo)致無(wú)謂的錯(cuò)誤。1.4節(jié)介紹完P(guān)ython語(yǔ)言數(shù)據(jù)對(duì)象后,我們會(huì)舉例說(shuō)明Python類別變量編碼的工作流程。

主站蜘蛛池模板: 沙河市| 文安县| 通化市| 微山县| 嘉禾县| 临邑县| 台安县| 山阳县| 黑水县| 新泰市| 浪卡子县| 开远市| 宝鸡市| 安阳市| 忻州市| 吕梁市| 营山县| 鹰潭市| 永和县| 宜春市| 庆安县| 镇安县| 鹤峰县| 牙克石市| 濮阳县| 寿宁县| 北票市| 精河县| 南通市| 南皮县| 惠州市| 峨边| 定远县| 新郑市| 通海县| 巴马| 平顺县| 中方县| 修武县| 中牟县| 同仁县|