專欄:機器學習
個人主頁:云端筑夢獅
一.數據集讀取方法(常用功能用熟即可不用背下來)
以例子代表需要的知識點和方法。
1. 導入必要的庫
from sklearn.datasets import load_iris
import numpy as np
load_iris()
:用于加載鳶尾花數據集的函數。(其他的數據集也按照類似的方式進行導入)
iris_data = load_iris()
print(iris_data)
print(type(iris_data))
load_iris()
返回一個類似字典的Bunch
對象,包含數據、標簽、特征名等信息。print(iris_data)
會輸出數據集的完整內容,包括 DESCR(描述信息)、data(特征數據)、target(標簽數據)等。type(iris_data)
顯示其類型
查看特征數據和標簽數據
print(iris_data.data[:10]) # 查看前10條樣本的特征值
print(iris_data.target[:10]) # 查看前10條樣本的標簽值
print(iris_data.feature_names) # 查看特征名稱
iris_data.data
:是一個形狀為(150, 4)
的二維數組,包含 150 個樣本的 4 個特征(花萼長度、花萼寬度、花瓣長度、花瓣寬度)。iris_data.target
:是一個長度為 150 的一維數組,包含樣本的分類標簽(0、1、2 分別代表山鳶尾、變色鳶尾、維吉尼亞鳶尾)。iris_data.feature_names
:列出了四個特征的名稱。
使用return_X_y=True
直接獲取特征和標簽
x, y = load_iris(return_X_y=True)
print(x[:10]) # 查看前10條樣本的特征值
print(y[:10]) # 查看前10條樣本的標簽值
return_X_y=True
參數使load_iris()
直接返回兩個數組:x
(特征數據)和y
(標簽數據),適合快速進行模型訓練。
以 DataFrame 格式加載數據集
iris_data = load_iris(as_frame=True)
print(iris_data.frame)
as_frame=True
參數使load_iris()
返回一個包含 DataFrame 對象。iris_data.frame
是一個 Pandas DataFrame,包含所有樣本的特征和標簽,方便進行數據探索和分析。
大家一定要在自己的機器上面運行一下這個代碼來熟悉一下
二.數據集的切分方法
from sklearn.model_selection import train_test_split
import numpy as np
train_test_split
:用于將數據集拆分為訓練集和測試集的函數。
a = np.arange(12).reshape(6, 2)
print("特征矩陣a:\n", a)b = np.array([0, 1, 0, 1, 0, 1])
- 特征矩陣?
a
:一個 6 行 2 列的數組,模擬 6 個樣本的二維特征 - 標簽數組?
b
?第一次劃分
X_train, X_test, y_train, y_test = train_test_split(a, b, random_state=42)
-
random_state=42
:固定隨機種子,確保每次運行代碼時劃分結果相同(便于復現)。未指定test_size
時,默認測試集占比為?25%(即 6 個樣本中,測試集為 1.5 個樣本,向上取整為 2 個樣本)。 -
訓練集標簽: [1 0 0 1] # 包含2個0和2個1 測試集標簽: [0 1] # 包含1個0和1個1
?第二次劃分:使用?stratify
?參數
X_train_strat, X_test_strat, y_train_strat, y_test_strat = train_test_split(a, b, random_state=42, stratify=b
)
-
stratify=b
:強制劃分后的訓練集和測試集的類別比例與原始數據?完全一致。- 原始數據中標簽
0
和1
各占 3 個(比例 1:1),因此:- 訓練集:4 個樣本,其中 0 和 1 各 2 個。
- 測試集:2 個樣本,其中 0 和 1 各 1 個。
- 原始數據中標簽
-
訓練集標簽: [0 1 1 0] # 嚴格包含2個0和2個1 測試集標簽: [0 1] # 嚴格包含1個0和1個1
?第三次劃分:修改?random_state
X_train_new, X_test_new, y_train_new, y_test_new = train_test_split(a, b, random_state=24)
random_state=24
:使用不同的隨機種子,生成與之前不同的劃分結果。-
訓練集標簽: [0 1 1 0] # 包含2個0和2個1 測試集標簽: [0 1] # 包含1個0和1個1
stratify
?參數的核心作用
當處理?類別不平衡數據(如 100 個樣本中 90 個正例、10 個反例)時,stratify
?參數尤為重要:
- 不使用?
stratify
:隨機劃分可能導致測試集中只有正例(如 25 個樣本全為正例),無法評估模型對反例的預測能力。 - 使用?
stratify
:強制測試集中保持 90% 正例、10% 反例的比例,確保模型評估的公平性。
?常見參數擴展
test_size=0.3
:指定測試集占比為 30%。shuffle=False
:禁用數據打亂(按原始順序劃分)。random_state
:控制劃分的隨機性,確保結果可復現。stratify
:保證訓練集和測試集的類別比例與原始數據一致,適用于類別不平衡場景。- 默認劃分比例為?75% 訓練集 + 25% 測試集,可通過
test_size
調整。