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

3.1.1 克利夫蘭心臟病數據集的二元目標

克利夫蘭心臟病(Cleveland,1988)數據集包含303名受試者的患者數據。數據集中的某些列包含有缺失值,我們也會處理這樣的問題。數據集包含13列,包括膽固醇和年齡。

任務目標是檢測某個患者對象是否有心臟病,因此這是二元目標。我們要解決的數據處理問題是,對數據使用0到4的值進行編碼,其中0表示沒有心臟病,1到4的范圍表示某種類型的心臟病。

我們將使用數據集中標識為Cleveland的部分,數據可以使用此鏈接下載:https://archive.ics.uci.edu/ml/machine-learning-databases/heartdisease/processed.cleveland.data

數據集的具體屬性如下:

讓我們按照下面的步驟將數據集讀入pandas DataFrame并清理數據:

1)在谷歌Colab中,將首先使用如下wget命令下載數據:

這樣,就可以將processing.cleveland.data文件下載到Colab的默認目錄中,并且可以通過檢查Colab左側的Files選項卡進行驗證。請注意,前面的指令都是一行,不幸的是,這個指令非常長。

2)接下來,我們使用pandas加載數據集,以驗證數據集是否為可讀和可訪問的。

Pandas是一個非常受數據科學家和機器學習科學家歡迎的Python庫。它簡化了加載和保存數據集、替換缺失的值、檢索數據的基本統計屬性,甚至執行轉換。Pandas就像是一個救星,現在大多數其他機器學習庫都接受Pandas作為有效的輸入格式。

在Colab中執行如下命令加載和顯示部分數據:

read_csv()函數的作用是:加載一個以逗號分隔值(CSV)格式化的文件。我們使用參數header=None告訴pandas數據沒有任何實際的頭文件。如果省略,pandas將使用數據的第一行作為每個列的名稱,但在本例中我們不希望這樣做。

加載的數據存儲在一個名為df的變量中。雖然df可以是任何名稱,但我認為df很容易記住,因為pandas是將數據存儲在DataFrame對象中。因此,對于數據來說,df似乎是一個合適、簡短且容易記住的名稱。然而,如果使用多個DataFrame,那么用一個描述它們所包含數據的名稱來對所有DataFrame分別進行不同的命名會更加方便。

在DataFrame上操作的head()方法類似于unix命令,用于檢索文件的前幾行。在DataFrame中,head()方法返回前五行數據。如果希望檢索更多或更少的數據行,那么可以指定一個整數作為該方法的參數。例如,如果你想要檢索前三行,那么你可以執行df.head(3)。

運行上述代碼的結果如下所示:

下面是一些需要注意和記住的要點,以備將來參考:

·在左邊,有一個未命名的列,豎列是連續的數字,0,1,…,4。這些是pandas分配給數據集中每一行的索引,是唯一的數字。有些數據集有唯一的標識符,例如圖像的文件名。

·在頂部,有一橫行是0,1,…,13。這些是列的標識符,它們也是唯一的,并且可以設置。

·在每一行和每一列的交點,我們的值要么是浮點小數,要么是整數。除了列13之外,整個數據集包含十進制數,列13是目標輸出,該列包含的是整數。

3)因為我們將使用這個數據集處理二元分類問題,所以我們現在需要更改最后一列,使其只包含二元值:0和1。我們將保留0的原始含義,即沒有心臟病,任何大于或等于1的都將映射到1,表示對某種類型心臟病的診斷??梢赃\行下列指令:

df[13]指令查看DataFrame并檢索索引為13的列的所有行。然后,在第13列的所有行上使用set()方法創建列中所有不同元素的集合。這樣,我們就可以知道有多少個不同的值,以便替換它們。輸出結果如下:

由此,我們知道0表示沒有心臟病,1表示有心臟病。然而,我們需要將2、3和4映射為1,因為它們也表示心臟病陽性。我們可以通過執行以下命令來實現這個改變:

這里,replace()函數在DataFrame上工作,替換特定的值。在我們的例子中,它有三個參數:

·to_replace=[2,3,4]表示要搜索的項列表,以便替換它們。

·value=1表示將替換每個匹配項的值。

·inplace=True向pandas表明想要對該列進行更改。

在某些情況下,pandas DataFrame的行為就像一個不可變的對象,此時就需要使用inplace=True參數。否則,就得這么做:

df[13]=df[13].replace(to_replace=[2,3,4],value=1),這對有經驗的pandas用戶來說不成問題。這意味著你應該都熟悉這兩種方式。

pandas初學者面臨的主要問題是,它的行為并不總是像一個不可變對象。因此,應該將所有的pandas文檔放在身邊:https://pandas.pydata.org/pandas-docs/stable/index.html。

執行該命令的輸出結果如下:

首先,請注意,當我們打印前5行時,第13列的值現在只包含0或1??梢詫⑺鼈兣c原始數據進行比較,以驗證加粗顯示的數字是否確實發生了變化。我們還使用set(df[13])驗證了該列的所有唯一值的集合現在只有{0,1},這是期望的目標。

有了這些變化,我們可以使用數據集來訓練深度學習模型,可能會改進現有的記錄性能(Detrano,R.,et al.,1989)。

可以應用同樣的方法,使得在集合中的任何其他列具有二元值。作為練習,讓我們將著名的MNIST數據集用作另外一個示例。

主站蜘蛛池模板: 井陉县| 云龙县| 红河县| 贡觉县| 达尔| 宁安市| 宜章县| 奇台县| 西贡区| 阿拉善盟| 长垣县| 建湖县| 项城市| 江西省| 阿拉善左旗| 壤塘县| 博白县| 巴彦县| 武邑县| 建瓯市| 宁城县| 马关县| 阜南县| 尼木县| 京山县| 建宁县| 车险| 临猗县| 苍梧县| 肥东县| 石泉县| 宁阳县| 吉木乃县| 商城县| 徐汇区| 广安市| 博客| 佛山市| 祁阳县| 开封县| 丹棱县|