目錄
數據預處理
數據標準化(StandardScaler)
數據歸一化(MinMaxScaler)
數據離散化(KBinsDiscretizer)
缺失值處理(SimpleImputer)
特征選擇
基于單變量特征選擇(SelectKBest)
遞歸特征消除(RFE)
特征重要性評估(通過模型的feature_importances_屬性)
模型選擇與評估
交叉驗證(cross_val_score)
訓練集和測試集劃分(train_test_split)
網格搜索(GridSearchCV)
模型評估指標
監督學習
線性回歸(LinearRegression)
邏輯回歸(LogisticRegression)
支持向量機(SVM)
決策樹(DecisionTreeClassifier/DecisionTreeRegressor)
隨機森林(RandomForestClassifier/RandomForestRegressor)
K近鄰(KNeighborsClassifier/KNeighborsRegressor)
無監督學習
K均值聚類(KMeans)
層次聚類(AgglomerativeClustering)
主成分分析(PCA)
DBSCAN(Density-Based Spatial Clustering of Applications with Noise)
?神經網絡
多層感知機(MLPClassifier/MLPRegressor)
神經網絡的優化器(如SGD、Adam等)
Scikit-learn是一個開源的Python機器學習庫,它提供了簡單有效的數據挖掘和數據分析工具。以下是Scikit-learn庫中各種方法功能的詳細介紹,按類別進行分類:
數據預處理
-
數據標準化(StandardScaler)
將數據按列(特征)進行標準化,即減去均值并除以標準差,使數據符合標準正態分布(均值為0,標準差為1)。
## 數據預處理
# 1. 數據標準化 StandardScaler
from sklearn.preprocessing import StandardScaler
import numpy as npdata = np.array([[1, 2], [3, 4], [5, 6]])# 創建標準化對象
scaler = StandardScaler()# 擬合并轉換數據
scaled_data = scaler.fit_transform(data)
print(scaled_data)
# [[-1.22474487 -1.22474487]
# [ 0. 0. ]
# [ 1.22474487 1.22474487]]
-
數據歸一化(MinMaxScaler)
將數據按列(特征)歸一化到指定的范圍(通常是0到1)。這對于一些對數據范圍敏感的算法(如神經網絡)很有用
# 2. 數據歸一化 MinMaxScaler
from sklearn.preprocessing import MinMaxScaler
import numpy as np# 示例數據
data = np.array([[1, 2], [3, 4], [5, 6]])# 創建歸一化對象
scaler = MinMaxScaler()# 擬合并轉換數據
normalized_data = scaler.fit_transform(data)print(normalized_data)
# [[0. 0. ]
# [0.5 0.5]
# [1. 1. ]]
-
數據離散化(KBinsDiscretizer)
將連續數據離散化為指定數量的區間。這在一些場景下可以簡化模型,例如在決策樹算法中,離散化后的數據可以減少模型的復雜度,同時也可以處理一些對連續數據不敏感的算法
# 3. 數據離散化 KBinsDiscretizer
from sklearn.preprocessing import KBinsDiscretizer
import numpy as np# 示例數據
data = np.array([[1, 2], [3, 4], [5, 6]])# 創建離散化對象
discretizer = KBinsDiscretizer(n_bins=3, encode='ordinal', strategy='uniform')# 擬合并轉換數據
discretized_data = discretizer.fit_transform(data)print(discretized_data)
# [[0. 0.]
# [1. 1.]
# [2. 2.]]
-
缺失值處理(SimpleImputer)
用于處理數據中的缺失值。可以采用不同的策略填充缺失值,如用均值、中位數、眾數等填充
# 4. 缺失值處理 SimpleImputerfrom sklearn.impute import SimpleImputer
import numpy as np# 示例數據,np.nan表示缺失值
data = np.array([[1, 2], [np.nan, 4], [5, 6]])# 創建缺失值填充對象
imputer = SimpleImputer(strategy='mean')# 擬合并填充缺失值
imputed_data = imputer.fit_transform(data)print(imputed_data)
# [[1. 2.]
# [3. 4.]
# [5. 6.]]
特征選擇
-
基于單變量特征選擇(SelectKBest)
選擇與目標變量相關性最高的K個特征。它通過統計檢驗(如卡方檢驗、互信息等)來評估每個特征與目標變量之間的關系,然后選擇得分最高的K個特征
## 特征選擇
# 1. 基于單變量特征選擇 SelectBest
from sklearn.feature_selection import SelectKBest, chi2
from sklearn.datasets import load_iris# 加載數據集
iris = load_iris()
X, y = iris.data, iris.target
print(X.shape, y.shape) # (150, 4) (150,)# 創建單變量特征選擇對象
selector = SelectKBest(chi2, k=2)# 擬合并選擇特征
X_new = selector.fit_transform(X, y)print(X_new.shape) # (150, 2)
-
遞歸特征消除(RFE)
通過遞歸的方式減少特征集的大小。它首先訓練一個模型,然后去掉最不重要的特征,再訓練模型,如此循環,直到達到指定的特征數量
# 2. 遞歸特征消除 RFE
from sklearn.feature_selection import RFE
from sklearn.svm import SVC
from sklearn.datasets import load_iris# 加載數據集
iris = load_iris()
X, y = iris.data, iris.target# 創建RFE對象
estimator = SVC(kernel="linear")
selector = RFE(estimator, n_features_to_select=2, step=1)# 擬合并選擇特征
X_new = selector.fit_transform(X, y)print(X_new.shape) # (150, 2)
-
特征重要性評估(通過模型的feature_importances_屬性)
一些模型(如決策樹、隨機森林等)可以提供特征重要性的評估。通過查看這些重要性值,可以了解哪些特征對模型的預測更有貢獻
# 3. 特征重要性評估
from sklearn.ensemble import RandomForestClassifier
from sklearn.datasets import load_iris# 加載數據集
iris = load_iris()
X, y = iris.data, iris.target# 創建隨機森林模型
model = RandomForestClassifier()# 訓練模型
model.fit(X, y)# 獲取特征重要性
feature_importances = model.feature_importances_print(feature_importances) # [0.12710536 0.02994003 0.51082638 0.33212824]
模型選擇與評估
-
交叉驗證(cross_val_score)
用于評估模型的性能。它將數據集分成若干個子集,然后在不同的子集上進行訓練和測試,最后計算模型在所有子集上的平均性能
## 模型選擇與評估
# 1. 交叉驗證 cross_val_scorefrom sklearn.model_selection import cross_val_score
from sklearn.datasets import load_iris
from sklearn.svm import SVC# 加載數據集
iris = load_iris()
X, y = iris.data, iris.target# 創建模型
model = SVC()# 進行交叉驗證
scores = cross_val_score(model, X, y, cv=5)print(scores) # [0.96666667 0.96666667 0.96666667 0.93333333 1. ]
-
訓練集和測試集劃分(train_test_split)
將數據集隨機劃分為訓練集和測試集。這是評估模型性能的基本方法,通過在訓練集上訓練模型,在測試集上測試模型,可以了解模型對未知數據的泛化能力
# 2. 訓練集和測試集劃分 train_test_splitfrom sklearn.model_selection import train_test_split
from sklearn.datasets import load_iris
from sklearn.linear_model import LogisticRegression# 加載數據集
iris = load_iris()
X, y = iris.data, iris.target# 劃分訓練集和測試集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)# 創建模型
model = LogisticRegression()# 訓練模型
model.fit(X_train, y_train)# 測試模型
accuracy = model.score(X_test, y_test)print(accuracy) # 1.0
-
網格搜索(GridSearchCV)
用于搜索模型的最優參數。它通過窮舉搜索的方式,在指定的參數網格中尋找最佳的參數組合
# 3. 網格搜索 GridSearchCVfrom sklearn.model_selection import GridSearchCV
from sklearn.svm import SVC
from sklearn.datasets import load_iris# 加載數據集
iris = load_iris()
X, y = iris.data, iris.target# 創建模型
model = SVC()# 定義參數網格
param_grid = {'C': [0.1, 1, 10], 'kernel': ['linear', 'rbf']}# 創建網格搜索對象
grid_search = GridSearchCV(model, param_grid, cv=5)# 進行網格搜索
grid_search.fit(X, y)# 獲取最佳參數和最佳分數
best_params = grid_search.best_params_
best_score = grid_search.best_score_print(best_params) # {'C': 1, 'kernel': 'linear'}
print(best_score) # 0.9800000000000001
-
模型評估指標
提供了多種模型評估指標,如準確率(accuracy_score)、精確率(precision_score)、召回率(recall_score)、F1分數(f1_score)等。這些指標可以根據不同的問題類型(分類、回歸等)來評估模型的性能
# 4. 模型評估指標from sklearn.metrics import accuracy_score, precision_score, recall_score, f1_score
from sklearn.datasets import load_iris
from sklearn.linear_model import LogisticRegression
from sklearn.model_selection import train_test_split# 加載數據集
iris = load_iris()
X, y = iris.data, iris.target# 劃分訓練集和測試集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)# 創建模型
model = LogisticRegression()# 訓練模型
model.fit(X_train, y_train)# 預測測試集
y_pred = model.predict(X_test)# 計算評估指標
accuracy = accuracy_score(y_test, y_pred)
precision = precision_score(y_test, y_pred, average='weighted')
recall = recall_score(y_test, y_pred, average='weighted')
f1 = f1_score(y_test, y_pred, average='weighted')print(f'Accuracy: {accuracy}') # Accuracy: 1.0
print(f'Precision: {precision}') # Precision: 1.0
print(f'Recall: {recall}') # Recall: 1.0
print(f'F1 Score: {f1}') # F1 Score: 1.0
監督學習
-
線性回歸(LinearRegression)
用于解決回歸問題,即預測連續值的目標變量。它假設目標變量與特征之間存在線性關系,通過最小二乘法等方法來擬合模型
## 監督學習
# 1. 線性回歸 LinearRegressionfrom sklearn.linear_model import LinearRegression
from sklearn.datasets import make_regression# 生成回歸數據
X, y = make_regression(n_samples=100, n_features=1, noise=0.1)# 創建線性回歸模型
model = LinearRegression()# 訓練模型
model.fit(X, y)# 預測
y_pred = model.predict(X)# 輸出模型權重和偏置項(截距)
print(model.coef_, model.intercept_) # [69.83035754] -0.02287143685714188
-
邏輯回歸(LogisticRegression)
用于解決二分類問題。它通過邏輯函數(Sigmoid函數)將線性回歸的輸出映射到0和1之間,從而實現分類
# 2. 邏輯回歸 LogisticRegressionfrom sklearn.linear_model import LogisticRegression
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split# 加載數據集
iris = load_iris()
X, y = iris.data, iris.target# 劃分訓練集和測試集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)# 創建邏輯回歸模型
model = LogisticRegression()# 訓練模型
model.fit(X_train, y_train)# 測試模型
accuracy = model.score(X_test, y_test)print(accuracy) # 1.0
-
支持向量機(SVM)
既可以用于分類(SVC)也可以用于回歸(SVR)。在分類任務中,它通過尋找最優的超平面來分割不同類別的數據;在回歸任務中,它通過擬合一條曲線來預測目標變量
# 3. 支持向量機 SVM
from sklearn.svm import SVC
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split# 加載數據集
iris = load_iris()
X, y = iris.data, iris.target# 劃分訓練集和測試集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)# 創建SVM模型
model = SVC(kernel='linear')# 訓練模型
model.fit(X_train, y_train)# 測試模型
accuracy = model.score(X_test, y_test)print(accuracy) # 1.0
-
決策樹(DecisionTreeClassifier/DecisionTreeRegressor)
決策樹是一種基于樹結構的模型,既可以用于分類也可以用于回歸。它通過一系列的條件判斷來對數據進行分類或預測
# 4. 決策樹 DecisionTreeClassifier/DecisionTreeRegressor
from sklearn.tree import DecisionTreeClassifier
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split# 加載數據集
iris = load_iris()
X, y = iris.data, iris.target# 劃分訓練集和測試集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)# 創建決策樹模型
model = DecisionTreeClassifier()# 訓練模型
model.fit(X_train, y_train)# 測試模型
accuracy = model.score(X_test, y_test)print(accuracy) # 1.0
-
隨機森林(RandomForestClassifier/RandomForestRegressor)
是基于決策樹的集成學習方法。它通過構建多個決策樹,并將它們的預測結果進行綜合來提高模型的性能
# 5. 隨機森林 RandomForestClassifier/RandomForestRegressor
from sklearn.ensemble import RandomForestClassifier
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split# 加載數據集
iris = load_iris()
X, y = iris.data, iris.target# 劃分訓練集和測試集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)# 創建隨機森林模型
model = RandomForestClassifier(n_estimators=100)# 訓練模型
model.fit(X_train, y_train)# 測試模型
accuracy = model.score(X_test, y_test)print(accuracy) # 1.0
-
K近鄰(KNeighborsClassifier/KNeighborsRegressor)
基于最近鄰的原理進行分類或回歸。在分類任務中,根據K個最近鄰的類別來確定目標數據的類別;在回歸任務中,根據K個最近鄰的目標值來預測目標數據的值
# 6. K近鄰 KNeighborsClassifier/KNeighborsRegressor
from sklearn.neighbors import KNeighborsClassifier
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split# 加載數據集
iris = load_iris()
X, y = iris.data, iris.target# 劃分訓練集和測試集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)# 創建K近鄰模型
model = KNeighborsClassifier(n_neighbors=3)# 訓練模型
model.fit(X_train, y_train)# 測試模型
accuracy = model.score(X_test, y_test)print(accuracy) # 1.0
無監督學習
-
K均值聚類(KMeans)
將數據劃分為K個簇,使簇內的數據點盡可能相似,簇間的數據點盡可能不同
## 無監督學習
# 1. K均值聚類 KMeansfrom sklearn.cluster import KMeans
from sklearn.datasets import make_blobs
import matplotlib.pyplot as plt# 生成聚類數據
X, y = make_blobs(n_samples=300, centers=4, cluster_std=0.60, random_state=0)# 創建K均值聚類模型
model = KMeans(n_clusters=4)# 訓練模型
model.fit(X)# 預測聚類標簽
y_pred = model.predict(X)# 可視化結果
plt.scatter(X[:, 0], X[:, 1], c=y_pred)
plt.show()
-
層次聚類(AgglomerativeClustering)
通過構建層次結構的方式進行聚類。它從每個數據點作為一個單獨的簇開始,然后逐步合并最相似的簇,直到達到指定的簇數量
# 2. 層次聚類 AgglomerativeClusteringfrom sklearn.cluster import AgglomerativeClustering
from sklearn.datasets import make_blobs
import matplotlib.pyplot as plt# 生成聚類數據
X, y = make_blobs(n_samples=300, centers=4, cluster_std=0.60, random_state=0)# 創建層次聚類模型
model = AgglomerativeClustering(n_clusters=4)# 預測聚類標簽
y_pred = model.fit_predict(X)# 可視化結果
plt.scatter(X[:, 0], X[:, 1], c=y_pred)
plt.show()
?
-
主成分分析(PCA)
用于降維。它通過將數據投影到主成分方向上,減少數據的維度,同時盡量保留數據的方差信息
# 3. 主成分分析 PCAfrom sklearn.decomposition import PCA
from sklearn.datasets import load_iris
import matplotlib.pyplot as plt# 加載數據集
iris = load_iris()
X, y = iris.data, iris.target# 創建PCA對象
pca = PCA(n_components=2)# 擬合并轉換數據
X_new = pca.fit_transform(X)# 可視化結果
plt.scatter(X_new[:, 0], X_new[:, 1], c=y)
plt.show()
?
-
DBSCAN(Density-Based Spatial Clustering of Applications with Noise)
一種基于密度的聚類算法,能夠發現任意形狀的簇,并且可以識別噪聲點
# 4. DBSCANfrom sklearn.cluster import DBSCAN
from sklearn.datasets import make_moons
import matplotlib.pyplot as plt# 生成聚類數據
X, y = make_moons(n_samples=300, noise=0.05, random_state=0)# 創建DBSCAN模型
model = DBSCAN(eps=0.2, min_samples=5)# 預測聚類標簽
y_pred = model.fit_predict(X)# 可視化結果
plt.scatter(X[:, 0], X[:, 1], c=y_pred)
plt.show()
?神經網絡
-
多層感知機(MLPClassifier/MLPRegressor)
是一種簡單的神經網絡模型,既可以用于分類也可以用于回歸。它包含一個或多個隱藏層,通過激活函數和反向傳播算法進行訓練
## 神經網絡
# 1. 多層感知機 MLPClassifier/MLPRegressorfrom sklearn.neural_network import MLPClassifier
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split# 加載數據集
iris = load_iris()
X, y = iris.data, iris.target# 劃分訓練集和測試集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)# 創建多層感知機模型
model = MLPClassifier(hidden_layer_sizes=(10,), max_iter=1000)# 訓練模型
model.fit(X_train, y_train)# 測試模型
accuracy = model.score(X_test, y_test)print(accuracy) # 1.0
-
神經網絡的優化器(如SGD、Adam等)
用于優化神經網絡的訓練過程。不同的優化器有不同的更新策略,可以加快模型的收斂速度,提高模型的性能
# 2. 神經網絡的優化器 SGD、Adam等from sklearn.neural_network import MLPClassifier
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split# 加載數據集
iris = load_iris()
X, y = iris.data, iris.target# 劃分訓練集和測試集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)# 創建多層感知機模型,使用Adam優化器
model = MLPClassifier(hidden_layer_sizes=(10,), max_iter=1000, solver='adam')# 訓練模型
model.fit(X_train, y_train)# 測試模型
accuracy = model.score(X_test, y_test)print(accuracy) # 1.0