自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

Python 中快速上手機器學(xué)習(xí)的七個基礎(chǔ)算法

開發(fā) 后端 機器學(xué)習(xí)
本文介紹了幾種常用的機器學(xué)習(xí)算法,包括線性回歸、邏輯回歸、決策樹、支持向量機和K近鄰算法,并通過Python代碼示例展示了它們的具體應(yīng)用。

機器學(xué)習(xí)作為一種讓計算機從數(shù)據(jù)中自動學(xué)習(xí)的技術(shù),在近年來得到了迅猛發(fā)展。本文將介紹幾種基礎(chǔ)的機器學(xué)習(xí)算法,并通過Python代碼示例展示它們的應(yīng)用。

1. 什么是機器學(xué)習(xí)

機器學(xué)習(xí)是一種讓計算機學(xué)會從數(shù)據(jù)中自動“學(xué)習(xí)”并做出預(yù)測或決策的技術(shù)。不需要顯式地編程告訴計算機如何執(zhí)行任務(wù)。機器學(xué)習(xí)的核心在于構(gòu)建模型,通過大量數(shù)據(jù)訓(xùn)練模型,使其能夠準(zhǔn)確預(yù)測未知數(shù)據(jù)的結(jié)果。

2. 為什么選擇Python

Python語言簡單易學(xué),擁有強大的科學(xué)計算庫,如NumPy、Pandas、Scikit-learn等。這些庫提供了大量的函數(shù)和工具,可以方便地處理數(shù)據(jù)、訓(xùn)練模型、評估性能。

3. 線性回歸

線性回歸是最簡單的機器學(xué)習(xí)算法之一。它假設(shè)因變量y與自變量x之間存在線性關(guān)系,即y = ax + b。線性回歸的目標(biāo)是找到最佳擬合直線,使得所有點到直線的距離平方和最小。

代碼示例:

import numpy as np
import matplotlib.pyplot as plt
from sklearn.linear_model import LinearRegression
from sklearn.model_selection import train_test_split

# 創(chuàng)建數(shù)據(jù)集
X = 2 * np.random.rand(100, 1)
y = 4 + 3 * X + np.random.randn(100, 1)

# 劃分訓(xùn)練集和測試集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

# 創(chuàng)建線性回歸模型
model = LinearRegression()

# 訓(xùn)練模型
model.fit(X_train, y_train)

# 預(yù)測
y_pred = model.predict(X_test)

# 可視化
plt.scatter(X_test, y_test, color='blue', label='Actual')
plt.plot(X_test, y_pred, color='red', linewidth=2, label='Predicted')
plt.xlabel('X')
plt.ylabel('y')
plt.legend()
plt.show()

# 輸出系數(shù)和截距
print("Coefficient:", model.coef_)
print("Intercept:", model.intercept_)

輸出結(jié)果:運行上述代碼后,會生成一張散點圖,其中藍(lán)色點表示真實值,紅色線表示預(yù)測值。同時控制臺會輸出模型的系數(shù)和截距。

4. 邏輯回歸

邏輯回歸主要用于解決二分類問題。它通過Sigmoid函數(shù)將線性組合映射到[0,1]區(qū)間內(nèi),代表事件發(fā)生的概率。邏輯回歸的目標(biāo)是最大化似然函數(shù),即找到一組參數(shù)使得訓(xùn)練樣本出現(xiàn)的概率最大。

代碼示例:

import numpy as np
import matplotlib.pyplot as plt
from sklearn.linear_model import LogisticRegression
from sklearn.datasets import make_classification
from sklearn.model_selection import train_test_split

# 創(chuàng)建數(shù)據(jù)集
X, y = make_classification(n_samples=100, n_features=2, n_redundant=0, n_informative=2,
                           random_state=1, n_clusters_per_class=1)

# 劃分訓(xùn)練集和測試集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

# 創(chuàng)建邏輯回歸模型
model = LogisticRegression()

# 訓(xùn)練模型
model.fit(X_train, y_train)

# 預(yù)測
y_pred = model.predict(X_test)

# 可視化
def plot_decision_boundary(model, axis):
    x0, x1 = np.meshgrid(
        np.linspace(axis[0], axis[1], int((axis[1]-axis[0])*100)).reshape(-1, 1),
        np.linspace(axis[2], axis[3], int((axis[3]-axis[2])*100)).reshape(-1, 1),
    )
    X_new = np.c_[x0.ravel(), x1.ravel()]
    y_predict = model.predict(X_new)
    zz = y_predict.reshape(x0.shape)
    from matplotlib.colors import ListedColormap
    custom_cmap = ListedColormap(['#EF9A9A','#FFF59D','#90CAF9'])
    plt.contourf(x0, x1, zz, linewidth=5, cmap=custom_cmap)
    
plot_decision_boundary(model, axis=[-3, 3, -3, 3])
plt.scatter(X[y==0, 0], X[y==0, 1])
plt.scatter(X[y==1, 0], X[y==1, 1])
plt.show()

# 輸出準(zhǔn)確率
from sklearn.metrics import accuracy_score
print("Accuracy:", accuracy_score(y_test, y_pred))

輸出結(jié)果:運行上述代碼后,會生成一張決策邊界圖,展示了邏輯回歸模型如何區(qū)分兩類樣本。同時控制臺會輸出模型在測試集上的準(zhǔn)確率。

5. 決策樹

決策樹是一種樹形結(jié)構(gòu)的分類和回歸算法。它通過遞歸地劃分?jǐn)?shù)據(jù)集,構(gòu)建一棵樹形結(jié)構(gòu),最終實現(xiàn)分類或回歸。每個內(nèi)部節(jié)點表示一個屬性上的測試,每個分支表示一個測試結(jié)果,每個葉節(jié)點表示一個類別或數(shù)值。

代碼示例:

import numpy as np
import matplotlib.pyplot as plt
from sklearn.datasets import load_iris
from sklearn.tree import DecisionTreeClassifier
from sklearn.model_selection import train_test_split
from sklearn.tree import plot_tree

# 加載數(shù)據(jù)集
data = load_iris()
X = data.data[:, :2]  # 只使用前兩個特征
y = data.target

# 劃分訓(xùn)練集和測試集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

# 創(chuàng)建決策樹模型
model = DecisionTreeClassifier(max_depth=3)

# 訓(xùn)練模型
model.fit(X_train, y_train)

# 可視化決策樹
plt.figure(figsize=(15, 10))
plot_tree(model, filled=True, feature_names=data.feature_names[:2], class_names=data.target_names)
plt.show()

# 輸出準(zhǔn)確率
from sklearn.metrics import accuracy_score
y_pred = model.predict(X_test)
print("Accuracy:", accuracy_score(y_test, y_pred))

輸出結(jié)果:運行上述代碼后,會生成一張決策樹的可視化圖,展示了決策樹如何根據(jù)特征進(jìn)行分類。同時控制臺會輸出模型在測試集上的準(zhǔn)確率。

6. 支持向量機 (SVM)

支持向量機是一種基于間隔最大化原則的分類和回歸方法。它試圖找到一個超平面,使得兩類樣本之間的間隔最大。對于非線性可分問題,可以通過核函數(shù)將數(shù)據(jù)映射到高維空間,從而找到合適的超平面。

代碼示例:

import numpy as np
import matplotlib.pyplot as plt
from sklearn.datasets import make_blobs
from sklearn.svm import SVC
from sklearn.model_selection import train_test_split

# 創(chuàng)建數(shù)據(jù)集
X, y = make_blobs(n_samples=100, centers=2, random_state=42)

# 劃分訓(xùn)練集和測試集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

# 創(chuàng)建SVM模型
model = SVC(kernel='linear')

# 訓(xùn)練模型
model.fit(X_train, y_train)

# 可視化
def plot_svm_boundary(model, axis):
    x0, x1 = np.meshgrid(
        np.linspace(axis[0], axis[1], int((axis[1]-axis[0])*100)).reshape(-1, 1),
        np.linspace(axis[2], axis[3], int((axis[3]-axis[2])*100)).reshape(-1, 1),
    )
    X_new = np.c_[x0.ravel(), x1.ravel()]
    y_predict = model.decision_function(X_new).reshape(x0.shape)
    zero_line = y_predict == 0
    plt.contour(x0, x1, y_predict, colors='k', levels=[-1, 0, 1], linestyles=['--', '-', '--'])
    plt.scatter(X[y==0, 0], X[y==0, 1])
    plt.scatter(X[y==1, 0], X[y==1, 1])
    
plot_svm_boundary(model, axis=[-4, 4, -4, 4])
plt.show()

# 輸出準(zhǔn)確率
from sklearn.metrics import accuracy_score
y_pred = model.predict(X_test)
print("Accuracy:", accuracy_score(y_test, y_pred))

輸出結(jié)果:

運行上述代碼后,會生成一張決策邊界圖,展示了SVM模型如何區(qū)分兩類樣本。同時控制臺會輸出模型在測試集上的準(zhǔn)確率。

7. K近鄰算法 (KNN)

K近鄰算法是一種基于實例的學(xué)習(xí)方法。給定一個測試樣本,KNN算法會在訓(xùn)練集中找到距離最近的K個鄰居,并根據(jù)這些鄰居的標(biāo)簽來預(yù)測測試樣本的標(biāo)簽。通常采用歐氏距離作為距離度量。

代碼示例:

import numpy as np
import matplotlib.pyplot as plt
from sklearn.datasets import make_classification
from sklearn.neighbors import KNeighborsClassifier
from sklearn.model_selection import train_test_split

# 創(chuàng)建數(shù)據(jù)集
X, y = make_classification(n_samples=100, n_features=2, n_redundant=0, n_informative=2,
                           random_state=1, n_clusters_per_class=1)

# 劃分訓(xùn)練集和測試集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

# 創(chuàng)建KNN模型
model = KNeighborsClassifier(n_neighbors=3)

# 訓(xùn)練模型
model.fit(X_train, y_train)

# 可視化
def plot_knn_boundary(model, axis):
    x0, x1 = np.meshgrid(
        np.linspace(axis[0], axis[1], int((axis[1]-axis[0])*100)).reshape(-1, 1),
        np.linspace(axis[2], axis[3], int((axis[3]-axis[2])*100)).reshape(-1, 1),
    )
    X_new = np.c_[x0.ravel(), x1.ravel()]
    y_predict = model.predict(X_new).reshape(x0.shape)
    plt.contourf(x0, x1, y_predict, cmap=plt.cm.Paired, alpha=0.8)
    plt.scatter(X[y==0, 0], X[y==0, 1])
    plt.scatter(X[y==1, 0], X[y==1, 1])
    
plot_knn_boundary(model, axis=[-3, 3, -3, 3])
plt.show()

# 輸出準(zhǔn)確率
from sklearn.metrics import accuracy_score
y_pred = model.predict(X_test)
print("Accuracy:", accuracy_score(y_test, y_pred))

輸出結(jié)果:運行上述代碼后,會生成一張決策邊界圖,展示了KNN模型如何區(qū)分兩類樣本。同時控制臺會輸出模型在測試集上的準(zhǔn)確率。

實戰(zhàn)案例:手寫數(shù)字識別

手寫數(shù)字識別是一個經(jīng)典的機器學(xué)習(xí)問題,可以用來驗證各種算法的效果。MNIST數(shù)據(jù)集包含了70000個大小為28x28像素的手寫數(shù)字圖片,其中60000張用于訓(xùn)練,10000張用于測試。

代碼示例:

import numpy as np
import matplotlib.pyplot as plt
from sklearn.datasets import fetch_openml
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LogisticRegression
from sklearn.metrics import accuracy_score

# 加載MNIST數(shù)據(jù)集
mnist = fetch_openml('mnist_784', version=1)
X, y = mnist['data'], mnist['target']

# 劃分訓(xùn)練集和測試集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

# 創(chuàng)建邏輯回歸模型
model = LogisticRegression(max_iter=1000)

# 訓(xùn)練模型
model.fit(X_train, y_train)

# 預(yù)測
y_pred = model.predict(X_test)

# 輸出準(zhǔn)確率
print("Accuracy:", accuracy_score(y_test, y_pred))

# 可視化預(yù)測結(jié)果
some_digit = X_test[0]
some_digit_image = some_digit.reshape(28, 28)

plt.imshow(some_digit_image, cmap=plt.cm.binary)
plt.axis("off")
plt.show()

print("Predicted:", model.predict([some_digit]))
print("Actual:", y_test[0])

輸出結(jié)果:運行上述代碼后,會輸出模型在測試集上的準(zhǔn)確率,并展示一個測試樣本及其預(yù)測結(jié)果和真實標(biāo)簽。

總結(jié)

本文介紹了幾種常用的機器學(xué)習(xí)算法,包括線性回歸、邏輯回歸、決策樹、支持向量機和K近鄰算法,并通過Python代碼示例展示了它們的具體應(yīng)用。通過實戰(zhàn)案例手寫數(shù)字識別進(jìn)一步驗證了這些算法的有效性。希望讀者能夠從中獲得對機器學(xué)習(xí)的理解和實踐能力。

責(zé)任編輯:趙寧寧 來源: 小白PythonAI編程
相關(guān)推薦

2024-08-30 14:29:03

2020-10-19 12:55:59

機器學(xué)習(xí)技術(shù)人工智能

2024-11-08 16:24:39

2015-06-11 13:34:54

編程編程階段

2023-05-30 09:59:38

2022-06-28 05:54:10

機器身份網(wǎng)絡(luò)攻擊網(wǎng)絡(luò)安全

2023-01-24 17:03:13

強化學(xué)習(xí)算法機器人人工智能

2020-06-03 10:58:49

機器學(xué)習(xí)工具人工智能

2022-04-13 10:25:08

基礎(chǔ)設(shè)施IT 團(tuán)隊

2024-10-14 16:37:25

2020-07-27 05:40:13

Python數(shù)據(jù)分析開發(fā)

2024-10-10 15:24:50

JSONPython

2022-08-02 12:03:26

Python可觀測性軟件開發(fā)

2021-09-22 12:45:47

Python數(shù)據(jù)分析

2019-11-25 14:24:24

機器學(xué)習(xí)算法數(shù)據(jù)

2012-04-24 09:49:13

手機購物

2020-10-10 16:07:16

物聯(lián)網(wǎng)設(shè)備物聯(lián)網(wǎng)IOT

2022-05-23 11:13:02

Python工具

2024-11-12 07:36:39

Python編程數(shù)據(jù)挖掘

2021-11-22 14:53:03

IT管理IT指標(biāo)IT領(lǐng)導(dǎo)者
點贊
收藏

51CTO技術(shù)棧公眾號