- 機器學習基礎
- ML - 首頁
- ML - 簡介
- ML - 入門
- ML - 基本概念
- ML - 生態系統
- ML - Python 庫
- ML - 應用
- ML - 生命週期
- ML - 技能要求
- ML - 實現
- ML - 挑戰與常見問題
- ML - 侷限性
- ML - 真實案例
- ML - 資料結構
- ML - 數學
- ML - 人工智慧
- ML - 神經網路
- ML - 深度學習
- ML - 獲取資料集
- ML - 分類資料
- ML - 資料載入
- ML - 資料理解
- ML - 資料準備
- ML - 模型
- ML - 監督學習
- ML - 無監督學習
- ML - 半監督學習
- ML - 強化學習
- ML - 監督學習與無監督學習
- 機器學習資料視覺化
- ML - 資料視覺化
- ML - 直方圖
- ML - 密度圖
- ML - 箱線圖
- ML - 相關矩陣圖
- ML - 散點矩陣圖
- 機器學習統計學
- ML - 統計學
- ML - 均值、中位數、眾數
- ML - 標準差
- ML - 百分位數
- ML - 資料分佈
- ML - 偏度和峰度
- ML - 偏差和方差
- ML - 假設
- ML 中的迴歸分析
- ML - 迴歸分析
- ML - 線性迴歸
- ML - 簡單線性迴歸
- ML - 多元線性迴歸
- ML - 多項式迴歸
- ML 中的分類演算法
- ML - 分類演算法
- ML - 邏輯迴歸
- ML - K 近鄰 (KNN)
- ML - 樸素貝葉斯演算法
- ML - 決策樹演算法
- ML - 支援向量機
- ML - 隨機森林
- ML - 混淆矩陣
- ML - 隨機梯度下降
- ML 中的聚類演算法
- ML - 聚類演算法
- ML - 基於中心點的聚類
- ML - K 均值聚類
- ML - K 中值聚類
- ML - 均值漂移聚類
- ML - 層次聚類
- ML - 基於密度的聚類
- ML - DBSCAN 聚類
- ML - OPTICS 聚類
- ML - HDBSCAN 聚類
- ML - BIRCH 聚類
- ML - 親和傳播
- ML - 基於分佈的聚類
- ML - 凝聚層次聚類
- ML 中的降維
- ML - 降維
- ML - 特徵選擇
- ML - 特徵提取
- ML - 後退消除法
- ML - 前向特徵構造
- ML - 高相關性過濾器
- ML - 低方差過濾器
- ML - 缺失值比率
- ML - 主成分分析
- 強化學習
- ML - 強化學習演算法
- ML - 利用與探索
- ML - Q 學習
- ML - REINFORCE 演算法
- ML - SARSA 強化學習
- ML - 演員-評論家方法
- 深度強化學習
- ML - 深度強化學習
- 量子機器學習
- ML - 量子機器學習
- ML - 使用 Python 的量子機器學習
- 機器學習雜項
- ML - 效能指標
- ML - 自動工作流
- ML - 提升模型效能
- ML - 梯度提升
- ML - 自舉匯聚 (Bagging)
- ML - 交叉驗證
- ML - AUC-ROC 曲線
- ML - 網格搜尋
- ML - 資料縮放
- ML - 訓練和測試
- ML - 關聯規則
- ML - Apriori 演算法
- ML - 高斯判別分析
- ML - 成本函式
- ML - 貝葉斯定理
- ML - 精度和召回率
- ML - 對抗性
- ML - 堆疊
- ML - 時期
- ML - 感知器
- ML - 正則化
- ML - 過擬合
- ML - P 值
- ML - 熵
- ML - MLOps
- ML - 資料洩露
- ML - 機器學習的盈利模式
- ML - 資料型別
- 機器學習 - 資源
- ML - 快速指南
- ML - 速查表
- ML - 面試問題
- ML - 有用資源
- ML - 討論
機器學習 - 資料理解
在處理機器學習專案時,通常我們會忽略兩個最重要的部分,即數學和資料。資料理解在 ML 中成為一個關鍵步驟的原因在於其資料驅動的方法。我們的 ML 模型產生的結果只會與我們提供給它的資料一樣好或一樣壞。
資料理解基本上涉及分析和探索資料,以識別可能存在的任何模式或趨勢。
資料理解階段通常包括以下步驟:
資料收集 - 這涉及收集您將用於分析的相關資料。資料可以從各種來源收集,例如資料庫、網站和 API。
資料清洗 - 這涉及透過去除任何不相關或重複的資料以及處理缺失資料值來清理資料。資料應以易於分析的方式進行格式化。
資料探索 - 這涉及探索資料以識別可能存在的任何模式或趨勢。這可以使用各種統計技術來完成,例如直方圖、散點圖和相關分析。
資料視覺化 - 這涉及建立資料的視覺表示以幫助您更好地理解它。這可以使用諸如圖形、圖表和地圖之類的工具來完成。
資料預處理 - 這涉及轉換資料,使其適合用於機器學習演算法。這可能包括縮放資料、將其轉換為不同的格式或降低其維度。
在 ML 專案中上傳資料之前,請先了解資料
在將資料上傳到 ML 專案之前瞭解我們的資料非常重要,原因如下:
識別資料質量問題
通過了解您的資料,您可以識別可能影響 ML 模型效能的資料質量問題,例如缺失值、異常值、不正確的資料型別和不一致性。透過解決這些問題,您可以提高模型的質量和準確性。
確定資料相關性
您可以確定您收集的資料是否與您試圖解決的問題相關。通過了解您的資料,您可以確定哪些特徵對您的模型很重要,哪些特徵可以忽略。
選擇合適的 ML 技術
根據資料的特性,您可能需要選擇特定的 ML 技術或演算法。例如,如果您的資料是分類的,您可能需要使用分類技術,而如果您的資料是連續的,您可能需要使用迴歸技術。瞭解您的資料可以幫助您為您的問題選擇合適的 ML 技術。
提高模型效能
通過了解您的資料,您可以設計新的特徵、預處理您的資料並選擇合適的 ML 技術來提高模型的效能。這可以帶來更好的準確性、精確率、召回率和 F1 分數。
使用統計學理解資料
在上一章中,我們討論瞭如何將 CSV 資料上傳到我們的 ML 專案中,但在上傳之前瞭解資料會更好。我們可以透過兩種方式瞭解資料,一種是使用統計學,另一種是使用視覺化。
在本章中,我們將藉助以下 Python 示例來使用統計學方法理解 ML 資料。
檢視原始資料
第一個示例是檢視您的原始資料。檢視原始資料非常重要,因為我們在檢視原始資料後獲得的洞察力將提高我們更好地進行預處理以及處理 ML 專案資料的可能性。
以下是使用 Pandas DataFrame 的 head() 函式在 Pima 印第安人糖尿病資料集上實現的 Python 指令碼,用於檢視前 10 行以更好地瞭解它:
示例
from pandas import read_csv path = r"C:\pima-indians-diabetes.csv" headernames = ['preg', 'plas', 'pres', 'skin', 'test', 'mass', 'pedi', 'age', 'class'] data = read_csv(path, names=headernames) print(data.head(10))
輸出
preg plas pres skin test mass pedi age class 0 6 148 72 35 0 33.6 0.627 50 1 1 1 85 66 29 0 26.6 0.351 31 0 2 8 183 64 0 0 23.3 0.672 32 1 3 1 89 66 23 94 28.1 0.167 21 0 4 0 137 40 35 168 43.1 2.288 33 1 5 5 116 74 0 0 25.6 0.201 30 0 6 3 78 50 32 88 31.0 0.248 26 1 7 10 115 0 0 0 35.3 0.134 29 0 8 2 197 70 45 543 30.5 0.158 53 1 9 8 125 96 0 0 0.0 0.232 54 1 10 4 110 92 0 0 37.6 0.191 30 0
從以上輸出中我們可以觀察到,第一列給出了行號,這對於引用特定觀察結果非常有用。
檢查資料的維度
瞭解 ML 專案有多少資料(以行和列表示)始終是一個好習慣。其背後的原因是:
如果我們有太多行和列,則演算法執行和模型訓練將需要很長時間。
如果我們有太少的行和列,則我們就沒有足夠的資料來很好地訓練模型。
以下是透過在 Pandas DataFrame 上列印 shape 屬性實現的 Python 指令碼。我們將它應用於 iris 資料集,以獲取其中行和列的總數。
示例
from pandas import read_csv path = r"C:\iris.csv" data = read_csv(path) print(data.shape)
輸出
(150, 4)
我們可以很容易地從輸出中觀察到,我們將要使用的 iris 資料集有 150 行和 4 列。
獲取每個屬性的資料型別
瞭解每個屬性的資料型別是另一個好習慣。其背後的原因是,根據需要,我們有時可能需要將一種資料型別轉換為另一種資料型別。例如,我們可能需要將字串轉換為浮點數或整數以表示分類或序數值。我們可以透過檢視原始資料來了解屬性的資料型別,但另一種方法是使用 Pandas DataFrame 的 dtypes 屬性。藉助 dtypes 屬性,我們可以對每個屬性的資料型別進行分類。這可以透過以下 Python 指令碼瞭解:
示例
from pandas import read_csv path = r"C:\iris.csv" data = read_csv(path) print(data.dtypes)
輸出
sepal_length float64 sepal_width float64 petal_length float64 petal_width float64 dtype: object
從以上輸出中,我們可以很容易地獲取每個屬性的資料型別。
資料的統計摘要
我們討論了獲取資料形狀(即行數和列數)的 Python 示例,但很多時候我們需要檢視該形狀之外的資料摘要。這可以透過 Pandas DataFrame 的 describe() 函式來完成,該函式進一步提供了每個資料屬性的以下 8 個統計屬性:
- 計數
- 均值
- 標準差
- 最小值
- 最大值
- 25%
- 中位數,即50%
- 75%
示例
from pandas import read_csv
from pandas import set_option
path = r"C:\pima-indians-diabetes.csv"
names = ['preg', 'plas', 'pres', 'skin', 'test', 'mass', 'pedi', 'age', 'class']
data = read_csv(path, names=names)
set_option('display.width', 100)
set_option('precision', 2)
print(data.shape)
print(data.describe())
輸出
(768, 9)
preg plas pres skin test mass pedi age class
count 768.00 768.00 768.00 768.00 768.00 768.00 768.00 768.00 768.00
mean 3.85 120.89 69.11 20.54 79.80 31.99 0.47 33.24 0.35
std 3.37 31.97 19.36 15.95 115.24 7.88 0.33 11.76 0.48
min 0.00 0.00 0.00 0.00 0.00 0.00 0.08 21.00 0.00
25% 1.00 99.00 62.00 0.00 0.00 27.30 0.24 24.00 0.00
50% 3.00 117.00 72.00 23.00 30.50 32.00 0.37 29.00 0.00
75% 6.00 140.25 80.00 32.00 127.25 36.60 0.63 41.00 1.00
max 17.00 199.00 122.00 99.00 846.00 67.10 2.42 81.00 1.00
從以上輸出中,我們可以觀察到Pima印第安人糖尿病資料集的資料統計摘要以及資料的形狀。
檢視類別分佈
類別分佈統計在分類問題中非常有用,在這些問題中我們需要了解類別值的平衡情況。瞭解類別值分佈非常重要,因為如果我們有高度不平衡的類別分佈,即一個類別的觀測值遠多於其他類別,那麼在機器學習專案的“資料準備”階段可能需要進行特殊處理。藉助Pandas DataFrame,我們可以輕鬆地獲取Python中的類別分佈。
示例
from pandas import read_csv
path = r"C:\pima-indians-diabetes.csv"
names = ['preg', 'plas', 'pres', 'skin', 'test', 'mass', 'pedi', 'age', 'class']
data = read_csv(path, names=names)
count_class = data.groupby('class').size()
print(count_class)
輸出
Class 0 500 1 268 dtype: int64
從以上輸出可以清楚地看出,類別為0的觀測值數量幾乎是類別為1的觀測值數量的兩倍。
檢視屬性之間的相關性
兩個變數之間的關係稱為相關性。在統計學中,計算相關性的最常用方法是皮爾遜相關係數。它可以有以下三個值:
係數值為1 - 表示變數之間存在完全正相關。
係數值為-1 - 表示變數之間存在完全負相關。
係數值為0 - 表示變數之間不存在相關性。
在將資料集用於機器學習專案之前,審查資料集中的屬性的兩兩相關性始終是一個好習慣,因為如果存在高度相關的屬性,一些機器學習演算法(如線性迴歸和邏輯迴歸)的效能會很差。在Python中,我們可以藉助Pandas DataFrame上的corr()函式輕鬆地計算資料集屬性的相關矩陣。
示例
from pandas import read_csv
from pandas import set_option
path = r"C:\pima-indians-diabetes.csv"
names = ['preg', 'plas', 'pres', 'skin', 'test', 'mass', 'pedi', 'age', 'class']
data = read_csv(path, names=names)
set_option('display.width', 100)
set_option('precision', 2)
correlations = data.corr(method='pearson')
print(correlations)
輸出
preg plas pres skin test mass pedi age class preg 1.00 0.13 0.14 -0.08 -0.07 0.02 -0.03 0.54 0.22 plas 0.13 1.00 0.15 0.06 0.33 0.22 0.14 0.26 0.47 pres 0.14 0.15 1.00 0.21 0.09 0.28 0.04 0.24 0.07 skin -0.08 0.06 0.21 1.00 0.44 0.39 0.18 -0.11 0.07 test -0.07 0.33 0.09 0.44 1.00 0.20 0.19 -0.04 0.13 mass 0.02 0.22 0.28 0.39 0.20 1.00 0.14 0.04 0.29 pedi -0.03 0.14 0.04 0.18 0.19 0.14 1.00 0.03 0.17 age 0.54 0.26 0.24 -0.11 -0.04 0.04 0.03 1.00 0.24 class 0.22 0.47 0.07 0.07 0.13 0.29 0.17 0.24 1.00
以上輸出中的矩陣給出了資料集中所有屬性對之間的相關性。
檢視屬性分佈的偏度
偏度可以定義為假設為高斯分佈但看起來在一個方向或另一個方向(向左或向右)扭曲或偏移的分佈。由於以下原因,檢視屬性的偏度是一項重要的任務:
資料中存在偏度需要在資料準備階段進行校正,以便我們可以從模型中獲得更高的準確性。
大多數機器學習演算法假設資料服從高斯分佈,即正態分佈或鐘形曲線資料。
在Python中,我們可以透過在Pandas DataFrame上使用skew()函式輕鬆地計算每個屬性的偏度。
示例
from pandas import read_csv path = r"C:\pima-indians-diabetes.csv" names = ['preg', 'plas', 'pres', 'skin', 'test', 'mass', 'pedi', 'age', 'class'] data = read_csv(path, names=names) print(data.skew())
輸出
preg 0.90 plas 0.17 pres -1.84 skin 0.11 test 2.27 mass -0.43 pedi 1.92 age 1.13 class 0.64 dtype: float64
從以上輸出中,可以觀察到正偏度或負偏度。如果值接近於零,則表示偏度較小。