這里的“機器”指的是計算機軟硬件組織,而非傳統的機械裝置;而“學習”,則是指軟件通過訓練過程,其性能得以提升的過程。
一、算法與模型的關系
在機器學習領域,算法和模型是兩個核心概念。算法是一種偏抽象的概念,它定義了計算機解決問題的步驟和流程。而模型則是更加具體的概念,通過代碼實現特定算法來完成任務。數學上,一個簡單的模型可以表示為 y=f(x),其中 x 是樣本特征,y 是樣本標簽,模型的目標就是將輸入特征 x 映射到輸出標簽 y。
二、機器學習算法分類
機器學習可以根據樣本是否包含標簽分為兩大類:有監督學習和無監督學習。
2.1 有監督學習(Supervised Learning)
在有監督學習中,樣本不僅包含特征 X
,還包含對應的標簽 y
。基于預測目標的不同,可以進一步細分為分類和回歸問題。
-
分類算法:用于預測離散量。
- 邏輯回歸:雖然名字中有“回歸”,但它實際上是一種分類方法,常用于二分類問題。
- KNN回歸:K近鄰算法不僅可以用于分類,還可以用于回歸任務。
- 樸素貝葉斯:基于貝葉斯定理并假設特征之間相互獨立的一種簡單快速的分類方法。
- 決策樹:通過構建樹狀模型來進行決策的算法,易于理解和實現。
- 支持向量機(SVM):尋找能夠最大化類別間間隔的超平面來分類數據點。
- 集成學習:如隨機森林、梯度提升等方法,通過組合多個弱學習器來提高預測性能。
-
回歸算法:用于預測連續量。
- 線性回歸:試圖找到自變量與因變量之間的線性關系。
- KNN回歸:與KNN分類類似,但輸出是連續值。
- 決策樹回歸:使用決策樹結構進行回歸分析。
- 支持向量機回歸(SVR):SVM的一個變種,適用于回歸任務。
- 集成學習:同樣適用于回歸任務,如隨機森林回歸等。
2.2 無監督學習(Unsupervised Learning)
在無監督學習中,我們只有特征 X
,沒有標簽 y
。這類學習主要用于探索數據內部結構或模式。
-
聚類算法
- KMeans:一種常用的聚類技術,它試圖將數據劃分成K個簇,使得每個簇內的點盡可能相似。
三、機器學習項目流程
-
Step1: 項目分析
首先明確項目的外部特性,包括輸入和輸出是什么,并確定這是一個分類還是回歸問題。例如,在鳶尾花識別項目中,輸入是一朵花的特征(如花萼長度、寬度等),輸出是該花所屬的子品種。
-
Step2: 數據采集
數據采集是構建數據集的過程,基于輸入和輸出的需求進行。本質上是數理統計問題,采集總體的一個樣本集,通過樣本集的統計量來估計總體的統計量,人工智能項目的本質,通過對樣本的分析,來評估/估計 總體的情況。
數據采集之后的結果是結構化數據:成行成列,確保每行代表一個樣本,各行之間保持獨立同分布,每列代表一個特征,各個特征之間是獨立的,每一個列也代表一個變量,變量分為
離散型變量
和連續型變量
,離散型變量:有限個狀態,不同的狀態值,狀態之間無大小、程度等概念,狀態之間是嚴格對立的!!!,比如男或者女,高或者矮,天晴或者下雨,
連續型變量:無限個數值,數值之間是大小、程度的差異,內涵是一致的,長度,深度等程度問題,比如長度10.5米。
怎么理解獨立同分布?
這包含2個意思,獨立性
和同分布
,
獨立性
指的是樣本之間沒有直接的關系或影響。具體來說,如果兩個樣本X1和X2是獨立的,那么知道X1的信息不會給你關于X2的任何額外信息。換句話說,每個樣本點的生成過程不受其他樣本點的影響。
同分布
意味著所有樣本都來自于同一個概率分布。這意味著每一個樣本都有相同的分布函數,包括均值、方差等統計特性都是相同的。如果一個樣本集是同分布的,那么無論你選擇哪一個樣本,它都應該具有相似的概率分布特征。 -
Step3: 數據預處理
包括數據清洗(去除重復值、缺失值、異常值、無效特征)、數據切分(訓練集、驗證集、測試集)以及數據預處理(中心化、歸一化、標準化)等步驟。訓練集
:訓練過程中,用來訓練模型(模型的學習數據)驗證集
:在訓練過程中,用來驗證模型的效果(不參與學習過程)測試集
:訓練完成后,用來評估模型的效果(不參與學習過程)在實際工作中,經常把驗證集和測試集合并,一起使用
-
Step4: 模型選擇
根據問題是分類還是回歸來選擇合適的模型,主要是根據標簽來判斷是分類還是回歸。例如,對于分類問題可以選擇邏輯回歸
、KNN
、樸素貝葉斯
、支持向量機
、決策樹
、集成學習
等;對于回歸問題,則可能選擇線性回歸
、KNN
、支持向量機
、決策樹
、集成學習
等。 -
Step5: 訓練模型
使用訓練集的數據對模型進行訓練,即讓模型學習如何將輸入特征映射到輸出標簽。把訓練集的特征X_train
和標簽y_train
給模型fit
方法,進行訓練,本質:模型學習的過程!學習如何把
X
映射為y
-
Step6: 評估模型
評估模型的效果,分類問題可以通過準確率accuracy
、召回率recall
、精準率precision
、F1-score
等指標;回歸問題則常使用MAE:平均絕對誤差
、MSE:平均平方誤差
等指標。 -
Step7: 保存和部署模型
最后,保存訓練好的模型以便后續加載和部署應用。
四、示例:鳶尾花識別項目
- 項目分析
項目需求:鳶尾花有3個子品種,想通過機器學習算法來做分類預測!進一步思考:
- 任務:給定一朵花,讓模型識別到底是哪個子品種!
- 輸入:一朵花- 一朵花是不能直接輸入計算機中- 特征工程:- 數字化轉型- 抽取/構建跟這朵花的類別有關系的特征來代表這朵花!!!- 跟業務專家詳細咨詢:- 花萼長度 x1- 花萼寬度 x2- 花瓣長度 x3- 花瓣寬度 x4
- 輸出:子品種:- 分類問題:- 對狀態進行編碼:- N個狀態:- 0, ..., N-1- 3個類別:- 0- 1- 2
目標是對鳶尾花的3個子品種進行分類預測。輸入為花朵的四個特征(花萼長度、寬度,花瓣長度、寬度),輸出為目標子品種編碼。
- 加載數據
使用sklearn.datasets.load_iris()加載鳶尾花數據集,并檢查其基本信息。
from sklearn.datasets import load_iris
result = load_iris()
dir(result)
print(result.DESCR)
X, y = load_iris(return_X_y=True)
# X.shape
# (150, 4)
# y.shape
# (150,)
['DESCR','data','data_module','feature_names','filename','frame','target','target_names']
- 切分數據
利用train_test_split函數按比例分割數據集。
from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=0)
- 套用模型
采用K近鄰算法作為模型,并對其進行訓練。
from sklearn.neighbors import KNeighborsClassifier
# 實例化對象
knn = KNeighborsClassifier()
# 訓練模型
knn.fit(X=X_train, y=y_train)
# 模型預測
y_pred = knn.predict(X=X_test)
# 預測結果
y_pred
# 真實結果
y_test
- 模型評估
計算預測結果的準確性。
acc = (y_pred == y_test).mean()
# 0.9666666666666667
- 模型的保存和加載
使用joblib庫保存和加載模型。
import joblib
# 模型的保存
joblib.dump(value=knn, filename="knn.model")
# 模型的加載
model = joblib.load(filename="knn.model")