機(jī)器學(xué)習(xí)
Author:louwill
mlxtend是一款高級的機(jī)器學(xué)習(xí)擴(kuò)展庫,可用于日常機(jī)器學(xué)習(xí)任務(wù)的主要工具,也可以作為sklearn的一個補(bǔ)充和輔助工具。
mlxtend主要包括以下模塊:
分類器
聚類器
數(shù)據(jù)
評估方法
特征提取
特征選擇
文件讀寫
關(guān)聯(lián)算法
常見概念
圖像
數(shù)學(xué)
繪圖
預(yù)處理
回歸器
文本
下面分別從分類器、圖像、繪圖和預(yù)處理等幾個模塊來展示mlxtend的強(qiáng)大功能。
分類器
mlxtend提供了多種分類和回歸算法api,包括多層感知機(jī)、stacking分類器、邏輯回歸等。以邏輯回歸為例:
from mlxtend.data import iris_data
from mlxtend.plotting import plot_decision_regions
from mlxtend.classifier import LogisticRegression
import matplotlib.pyplot as plt
# Loading Data
X, y = iris_data()
X = X[:, [0, 3]] # sepal length and petal width
X = X[0:100] # class 0 and class 1
y = y[0:100] # class 0 and class 1
# standardize
X[:,0] = (X[:,0] - X[:,0].mean()) / X[:,0].std()
X[:,1] = (X[:,1] - X[:,1].mean()) / X[:,1].std()
lr = LogisticRegression(eta=0.1,
l2_lambda=0.0,
epochs=100,
minibatches=1, # for Gradient Descent
random_seed=1,
print_progress=3)
lr.fit(X, y)
plot_decision_regions(X, y, clf=lr)
plt.title('Logistic Regression - Gradient Descent')
plt.show()
plt.plot(range(len(lr.cost_)), lr.cost_)
plt.xlabel('Iterations')
plt.ylabel('Cost')
plt.show()
圖像
圖像模塊提供了人臉特征點提取的api,示例如下:
import imageio
import matplotlib.pyplot as plt
from mlxtend.image import extract_face_landmarks
img = imageio.imread('test-face.png')
landmarks = extract_face_landmarks(img)
print(landmarks.shape)
print('\n\nFirst 10 landmarks:\n', landmarks[:10])
可視化展示:
fig = plt.figure(figsize=(15, 5))
ax = fig.add_subplot(1, 3, 1)
ax.imshow(img)
ax = fig.add_subplot(1, 3, 2)
ax.scatter(landmarks[:, 0], -landmarks[:, 1], alpha=0.8)
ax = fig.add_subplot(1, 3, 3)
img2 = img.copy()
for p in landmarks:
img2[p[1]-3:p[1]+3,p[0]-3:p[0]+3,:] = (255, 255, 255)
ax.imshow(img2)
plt.show()
展示人臉特征點:
import numpy as np
import matplotlib.pyplot as plt
left = np.array([36, 37, 38, 39, 40, 41])
right = np.array([42, 43, 44, 45, 46, 47])
fig = plt.figure(figsize=(10,10))
plt.plot(landmarks[:,0], -landmarks[:,1], 'ro', markersize=8, alpha = 0.5)
for i in range(landmarks.shape[0]):
plt.text(landmarks[i,0]+1, -landmarks[i,1], str(i), size=14)
left_eye = np.mean(landmarks[left], axis=0)
right_eye = np.mean(landmarks[right], axis=0)
print('Coordinates of the Left Eye: ', left_eye)
print('Coordinates of the Right Eye: ', right_eye)
plt.plot([left_eye[0]], [-left_eye[1]],
marker='+', color='blue', markersize=10, mew=4)
plt.plot([right_eye[0]], [-right_eye[1]],
marker='+', color='blue', markersize=10, mew=4)
plt.xticks([])
plt.yticks([])
plt.show()
Coordinates of the Left Eye: [169.33333333 156. ]
Coordinates of the Right Eye: [210.83333333 152.16666667]
繪圖
mlxtend的繪圖模塊提供了各種機(jī)器學(xué)習(xí)輔助繪圖工具,比如分類散點圖、熱圖、決策邊界圖、多分類混淆矩陣圖等等。以多分類混淆矩陣圖為例,sklearn的plot_confusion模塊只提供了繪制二分類的混淆矩陣圖,如果想繪制多分類的混淆矩陣,嘗試使用mlxtend的plot_confusion_matrix函數(shù)。示例如下:
import matplotlib.pyplot as plt
from mlxtend.evaluate import confusion_matrix
from mlxtend.plotting import plot_confusion_matrix
y_target = [1, 1, 1, 0, 0, 2, 0, 3]
y_predicted = [1, 0, 1, 0, 0, 2, 1, 3]
cm = confusion_matrix(y_target=y_target,
y_predicted=y_predicted,
binary=False)
fig, ax = plot_confusion_matrix(conf_mat=cm)
plt.show()
再來看如何繪制模型的決策邊界圖。比如我們想看看SVM在iris數(shù)據(jù)集上的分類效果,嘗試?yán)L制其決策邊界圖:
from mlxtend.plotting import plot_decision_regions
import matplotlib.pyplot as plt
from sklearn import datasets
from sklearn.svm import SVC
# Loading some example data
iris = datasets.load_iris()
X = iris.data[:, [0, 2]]
y = iris.target
# Training a classifier
svm = SVC(C=0.5, kernel='linear')
svm.fit(X, y)
# Plotting decision regions
plot_decision_regions(X, y, clf=svm, legend=2)
# Adding axes annotations
plt.xlabel('sepal length [cm]')
plt.ylabel('petal length [cm]')
plt.title('SVM on Iris')
plt.show()
預(yù)處理
mlxtend預(yù)處理模塊提供了各種數(shù)據(jù)標(biāo)準(zhǔn)化和歸一化方法,這里以分類變量的one-hot編碼為例。mlxtend下的one_hot可對列表或numpy數(shù)組的數(shù)據(jù)進(jìn)行轉(zhuǎn)換:
from mlxtend.preprocessing import one_hot
import numpy as np
# numpy array
y = np.array([0, 1, 2, 1, 2])
one_hot(y)
from mlxtend.preprocessing import one_hot
# list
y = [0, 1, 2, 1, 2]
one_hot(y)
mlxtend其他模塊和更多功能參考官方文檔:
http://rasbt.github.io/mlxtend/
GitHub源碼地址:
https://github.com/rasbt/mlxtend
參考資料:
http://rasbt.github.io/mlxtend/user_guide
聯(lián)系客服