一、Scikit-learn
Scikit-learn 是 開源的Python庫,通過統(tǒng)一的界面實(shí)現(xiàn)機(jī)器學(xué)習(xí)、預(yù)處理、交叉驗(yàn)證及可視化算法。
>>> from sklearn import neighbors, datasets, preprocessing
>>> from sklearn.model_selection import train_test_split
>>> from sklearn.metrics import accuracy_score
>>> iris = datasets.load_iris()
>>> X, y = iris.data[:, :2], iris.target
>>> X_train, X_test, y_train, y_test = train_test_split(X, y, random_state=33)
>>> scaler = preprocessing.StandardScaler().fit(X_train)
>>> X_train = scaler.transform(X_train)
>>> X_test = scaler.transform(X_test)
>>> knn = neighbors.KNeighborsClassifier(n_neighbors=5)
>>> knn.fit(X_train, y_train)
>>> y_pred = knn.predict(X_test)
>>> accuracy_score(y_test, y_pred)
??以上是使用 scikit-learn 庫 進(jìn)行 k-最近鄰(KNN)分類的流程,得到 KNN 分類器在 iris 數(shù)據(jù)集上的預(yù)測準(zhǔn)確率。
二、加載數(shù)據(jù)
??Scikit-learn 處理的數(shù)據(jù)是存儲為 NumPy 數(shù)組或 SciPy 稀疏矩陣的數(shù)字,還支持 Pandas 數(shù)據(jù)框等可轉(zhuǎn)換為數(shù)字?jǐn)?shù)組的其它數(shù)據(jù)類型。
>>> import numpy as np
# 導(dǎo)入了 NumPy 庫,用于進(jìn)行數(shù)值計(jì)算和數(shù)組操作
>>> X = np.random.random((10,5))
>>> y = np.array(['M','M','F','F','M','F','M','M','F','F','F'])
>>> X[X < 0.7] = 0
??以上我們使用了 NumPy 庫來生成一個隨機(jī)的 10 行 5 列的矩陣 X,并將小于 0.7 的元素置為 0。同時(shí),創(chuàng)建了一個包含性別標(biāo)簽的 NumPy 數(shù)組 y。我們得到一個形狀為 (10, 5) 的隨機(jī)矩陣 X,其中小于 0.7 的元素被置為 0,并創(chuàng)建了一個包含性別標(biāo)簽的數(shù)組 y。這些數(shù)據(jù)可以用于接下來的 分析、 建模 或其他任務(wù)中。
三、訓(xùn)練集與測試集數(shù)據(jù)
??使用了 scikit-learn 庫的 train_test_split 函數(shù),將數(shù)據(jù)集劃分為 訓(xùn)練集 和 測試集。
>>> from sklearn.model_selection import train_test_split
>>> X_train, X_test, y_train, y_test = train_test_split(X, y, random_state=0)
??得到劃分后的訓(xùn)練集和測試集的特征數(shù)據(jù) X_train、X_test,以及對應(yīng)的類別標(biāo)簽數(shù)據(jù) y_train、y_test??梢?strong>在訓(xùn)練集上進(jìn)行模型訓(xùn)練,然后使用測試集評估模型的性能和準(zhǔn)確率。
四、創(chuàng)建模型
4.1 有監(jiān)督學(xué)習(xí)評估器
4.1.1 線性回歸
??我們使用 scikit-learn 庫的 LinearRegression 類,創(chuàng)建一個線性回歸模型對象。
>>> from sklearn.linear_model import LinearRegression
>>> lr = LinearRegression(normalize=True)
??創(chuàng)建一個線性回歸模型對象 lr。
4.1.2 支持向量機(jī)(SVM)
??我們使用 scikit-learn 庫的 SVC 類,創(chuàng)建一個 支持向量機(jī)(SVM)模型對象。
>>> from sklearn.svm import SVC
>>> svc = SVC(kernel='linear')
??創(chuàng)建一個支持向量機(jī)模型對象 svc,并 使用線性核函數(shù)進(jìn)行分類。
4.1.3 樸素貝葉斯
??使用 scikit-learn 庫的 GaussianNB 類,創(chuàng)建一個 樸素貝葉斯模型對象。
>>> from sklearn.naive_bayes import GaussianNB
>>> gnb = GaussianNB()
??創(chuàng)建一個樸素貝葉斯模型對象 gnb。樸素貝葉斯模型是一種常用的概率模型,適用于 分類問題。
4.1.4 KNN
??使用 scikit-learn 庫的 neighbors 模塊,創(chuàng)建一個 K 最近鄰(KNN)分類器對象。
>>> from sklearn import neighbors
>>> knn = neighbors.KNeighborsClassifier(n_neighbors=5)
??創(chuàng)建一個 KNN 分類器對象 knn,它會 根據(jù)最近的鄰居來進(jìn)行分類。KNN 是一種 基于實(shí)例的學(xué)習(xí)方法,根據(jù)最近鄰居的標(biāo)簽進(jìn)行分類。
4.2 無監(jiān)督學(xué)習(xí)評估器
4.2.1 主成分分析(PCA)
??使用 scikit-learn 庫的 PCA 類,創(chuàng)建一個 主成分分析(PCA)對象。
>>> from sklearn.decomposition import PCA
>>> pca = PCA(n_components=0.95)
??創(chuàng)建一個 PCA 對象 pca,它可以用于降維或特征提取。PCA 是一種常用的降維技術(shù),可 將高維數(shù)據(jù)映射到低維空間,保留數(shù)據(jù)的主要特征。
4.2.2 K Means
??使用 scikit-learn 庫的 KMeans 類,創(chuàng)建一個 K-Means 聚類器對象。
>>> from sklearn.cluster import KMeans
>>> k_means = KMeans(n_clusters=3, random_state=0)
??創(chuàng)建一個 K-Means 聚類器對象 k_means,它將根據(jù)數(shù)據(jù)點(diǎn)之間的距離進(jìn)行聚類。K-Means 是一種常用的聚類算法,將數(shù)據(jù)點(diǎn)分割成預(yù)定義數(shù)量的簇,使得簇內(nèi)的數(shù)據(jù)點(diǎn)盡可能相似,而不同簇之間的數(shù)據(jù)點(diǎn)差異較大。
五、模型擬合
5.1 有監(jiān)督學(xué)習(xí)
??展示了 三種不同的機(jī)器學(xué)習(xí)算法在訓(xùn)練集上進(jìn)行訓(xùn)練的過程。
# 擬合數(shù)據(jù)與模型
>>> lr.fit(X, y)
# 使用邏輯回歸算法(Logistic Regression)對數(shù)據(jù)集(X, y)進(jìn)行擬合。其中,X是輸入特征矩陣,y是對應(yīng)的目標(biāo)變量向量
>>> knn.fit(X_train, y_train)
# 使用K近鄰算法(K-Nearest Neighbors)對訓(xùn)練集(X_train, y_train)進(jìn)行擬合。其中,X_train是訓(xùn)練集的輸入特征矩陣,y_train是對應(yīng)的目標(biāo)變量向量
>>> svc.fit(X_train, y_train)
# 使用支持向量機(jī)算法(Support Vector Machine)對訓(xùn)練集(X_train, y_train)進(jìn)行擬合。其中,X_train是訓(xùn)練集的輸入特征矩陣,y_train是對應(yīng)的目標(biāo)變量向量
5.2 無監(jiān)督學(xué)習(xí)
??對訓(xùn)練集進(jìn)行聚類和特征降維的過程如下。
>>> k_means.fit(X_train) # 擬合數(shù)據(jù)與模型
>>> pca_model = pca.fit_transform(X_train) # 擬合并轉(zhuǎn)換數(shù)據(jù)
??模型會根據(jù)給定的訓(xùn)練集數(shù)據(jù)對 K-Means 聚類算法和 PCA 算法進(jìn)行擬合。對于 K-Means 聚類算法,模型會 學(xué)習(xí)找到最佳的簇中心點(diǎn);對于 PCA 算法,模型會 學(xué)習(xí)找到最佳的主成分投影空間。這些擬合操作會生成相應(yīng)的模型或轉(zhuǎn)換對象,以便于之后對新的數(shù)據(jù)進(jìn)行聚類或降維操作。
六、擬合數(shù)據(jù)與模型
6.1 標(biāo)準(zhǔn)化
??以下是對訓(xùn)練集和測試集進(jìn)行數(shù)據(jù)標(biāo)準(zhǔn)化的過程。
>>> from sklearn.preprocessing import StandardScaler
>>> scaler = StandardScaler().fit(X_train)
>>> standardized_X = scaler.transform(X_train)
>>> standardized_X_test = scaler.transform(X_test)
??創(chuàng)建一個 StandardScaler 對象 scaler,并 使用訓(xùn)練集的數(shù)據(jù)對其進(jìn)行擬合。然后,我們可以使用 scaler 對訓(xùn)練集和測試集進(jìn)行標(biāo)準(zhǔn)化轉(zhuǎn)換,以確保數(shù)據(jù)具有相同的尺度和范圍,以 提高模型的訓(xùn)練和預(yù)測效果。
6.2 歸一化
??接下來我們學(xué)習(xí)對訓(xùn)練集和測試集進(jìn)行數(shù)據(jù)歸一化。
>>> from sklearn.preprocessing import Normalizer
>>> scaler = Normalizer().fit(X_train)
>>> normalized_X = scaler.transform(X_train)
>>> normalized_X_test = scaler.transform(X_test)
??創(chuàng)建一個 Normalizer 對象 scaler,并使用訓(xùn)練集的數(shù)據(jù)對其進(jìn)行擬合。然后,我們可以 使用 scaler 對訓(xùn)練集和測試集進(jìn)行歸一化轉(zhuǎn)換,以確保數(shù)據(jù)在特征向量方向上具有單位范數(shù)。歸一化可以使得不同樣本之間的特征向量更具可比性,并且有助于某些機(jī)器學(xué)習(xí)算法的訓(xùn)練和預(yù)測效果。
6.3 二值化
??這里展示了對數(shù)據(jù)集進(jìn)行二值化處理的過程。
>>> from sklearn.preprocessing import Binarizer
>>> binarizer = Binarizer(threshold=0.0).fit(X)
>>> binary_X = binarizer.transform(X)
??創(chuàng)建一個 Binarizer 對象 binarizer,并使用閾值 threshold=0.0 對數(shù)據(jù)集 X 進(jìn)行二值化處理。然后,我們可以 使用 binarizer 對數(shù)據(jù)集進(jìn)行二進(jìn)制轉(zhuǎn)換,并將結(jié)果保存在變量 binary_X 中。二值化可以使得不同樣本之間的特征更具可比性,并且有助于某些機(jī)器學(xué)習(xí)算法的訓(xùn)練和預(yù)測效果。
6.4 編碼分類特征
??使用 LabelEncoder 對目標(biāo)變量進(jìn)行標(biāo)簽編碼的過程。
>>> from sklearn.preprocessing import LabelEncoder
>>> enc = LabelEncoder()
>>> y = enc.fit_transform(y)
??創(chuàng)建一個 LabelEncoder 對象 enc,并使用其 fit_transform 方法對目標(biāo)變量 y 進(jìn)行標(biāo)簽編碼處理。編碼后的結(jié)果會覆蓋原目標(biāo)變量 y 的值,使得原本的標(biāo)簽被替換為相應(yīng)的整數(shù)編碼。標(biāo)簽編碼常用于將非數(shù)字類型的目標(biāo)變量轉(zhuǎn)換為模型可接受的數(shù)字形式,以便進(jìn)行機(jī)器學(xué)習(xí)任務(wù)的訓(xùn)練和預(yù)測。
6.5 輸入缺失值
??使用 Imputer 對象對數(shù)據(jù)集中的缺失值進(jìn)行填充。
>>> from sklearn.preprocessing import Imputer
>>> imp = Imputer(missing_values=0, strategy='mean', axis=0)
>>> imp.fit_transform(X_train)
??創(chuàng)建一個 Imputer 對象 imp,并使用其 fit_transform 方法對訓(xùn)練集 X_train 中的缺失值進(jìn)行填充處理。填充后的結(jié)果會覆蓋原始的訓(xùn)練集數(shù)據(jù) X_train,使得缺失值被替換為相應(yīng)列的均值。Imputer 類常用于在數(shù)據(jù)預(yù)處理階段處理缺失值,以保證數(shù)據(jù)集的完整性和準(zhǔn)確性。
6.6 生成多項(xiàng)式特征
??使用 PolynomialFeatures 對特征進(jìn)行多項(xiàng)式擴(kuò)展。
>>> from sklearn.preprocessing import PolynomialFeatures
>>> poly = PolynomialFeatures(5)
>>> poly.fit_transform(X)
??創(chuàng)建一個 PolynomialFeatures 對象 poly,并使用其 fit_transform 方法對數(shù)據(jù)集 X 進(jìn)行多項(xiàng)式擴(kuò)展處理。擴(kuò)展后的結(jié)果會包含原始特征的各種次方組合,從一次項(xiàng)到最高次數(shù)為 5 的項(xiàng)。多項(xiàng)式擴(kuò)展常用于增加模型的復(fù)雜度,以捕捉特征之間的非線性關(guān)系,從而提升模型的預(yù)測能力。
七、評估模型性能
7.1 評估模型性能
7.1.1 準(zhǔn)確率
??使用 scikit-learn 中的評估器評分法和指標(biāo)評分函數(shù)來評估模型的準(zhǔn)確性。
>>> knn.score(X_test, y_test)
# 評估器評分法
>>> from sklearn.metrics import accuracy_score
# 指標(biāo)評分函數(shù)
>>> accuracy_score(y_test, y_pred)
??可以使用評估器評分法或指標(biāo)評分函數(shù)來評估模型在測試集上的準(zhǔn)確性。評估器評分法直接調(diào)用模型對象的 score 方法,而指標(biāo)評分函數(shù)則需要傳入真實(shí)目標(biāo)變量數(shù)據(jù)和預(yù)測結(jié)果數(shù)據(jù)來計(jì)算準(zhǔn)確性得分。這些評估方法可以幫助我們 了解模型的性能,并 比較不同模型之間的表現(xiàn)。
7.1.2 分類預(yù)估評價(jià)函數(shù)
??使用 scikit-learn 中的 classification_report 函數(shù) 來生成分類模型的精確度、召回率、F1指數(shù)和支持率等評估指標(biāo)報(bào)告。
>>> from sklearn.metrics import classification_report
# 精確度、召回率、F1分?jǐn)?shù)及支持率
>>> print(classification_report(y_test, y_pred))
??可以使用 classification_report 函數(shù)生成分類模型的評估指標(biāo)報(bào)告。該報(bào)告會包含每個類別的精確度、召回率、F1指數(shù)和支持率等指標(biāo),以及加權(quán)平均值和總平均值。這些指標(biāo)可以幫助我們評估模型在不同類別上的表現(xiàn),并提供關(guān)于模型性能的詳細(xì)信息。
7.1.3 混淆矩陣
??使用 scikit-learn 中的 confusion_matrix 函數(shù)來 生成分類模型的混淆矩陣。
>>> from sklearn.metrics import confusion_matrix
>>> print(confusion_matrix(y_test, y_pred))
??使用 confusion_matrix 函數(shù)生成分類模型的混淆矩陣。混淆矩陣以矩陣的形式展示了模型在各個類別上的分類結(jié)果,包括 真正例、假正例、假負(fù)例 和 真負(fù)例的數(shù)量。這樣,我們就可以根據(jù)混淆矩陣來評估模型在不同類別上的分類性能,并進(jìn)一步分析誤分類的情況。
7.2 回歸指標(biāo)
7.2.1 平均絕對誤差
??使用 scikit-learn 中的 mean_absolute_error 函數(shù)來計(jì)算回歸模型的平均絕對誤差(Mean Absolute Error)。
>>> from sklearn.metrics import mean_absolute_error
>>> y_true = [3, -0.5, 2]
>>> mean_absolute_error(y_true, y_pred)
??使用 mean_absolute_error 函數(shù)計(jì)算回歸模型的平均絕對誤差。該指標(biāo) 衡量模型的預(yù)測結(jié)果與真實(shí)值之間的平均偏差程度,數(shù)值越小表示模型的預(yù)測越準(zhǔn)確。使用平均絕對誤差可以幫助您評估回歸模型的性能,并比較不同模型之間的表現(xiàn)。
7.2.2 均方誤差
??使用 scikit-learn 中的 mean_squared_error 函數(shù)來計(jì)算回歸模型的均方誤差(Mean Squared Error)。
>>> from sklearn.metrics import mean_squared_error
>>> mean_squared_error(y_test, y_pred)
??使用 mean_squared_error 函數(shù)計(jì)算回歸模型的均方誤差。該指標(biāo)衡量了模型的預(yù)測結(jié)果與真實(shí)值之間的平均差異程度,數(shù)值越小表示模型的預(yù)測越準(zhǔn)確。使用均方誤差可以幫助我們評估回歸模型的性能,并比較不同模型之間的表現(xiàn)。
7.2.3 R2評分
??使用 scikit-learn 中的 r2_score 函數(shù)來計(jì)算 回歸模型的 R2 分?jǐn)?shù)(R-squared score)。
>>> from sklearn.metrics import r2_score
>>> r2_score(y_true, y_pred)
??通過執(zhí)行這些代碼,可以使用 r2_score 函數(shù)計(jì)算回歸模型的 R2 分?jǐn)?shù),即確定性系數(shù)或擬合優(yōu)度。R2 分?jǐn)?shù)的取值范圍在 0 到 1 之間,數(shù)值越接近 1 表示模型對數(shù)據(jù)的擬合程度越好,而越接近 0 則表示模型的擬合效果較差。R2 分?jǐn)?shù)可以幫助我們評估回歸模型的性能,并與其他模型進(jìn)行比較。
7.3 群集指標(biāo)
7.3.1 調(diào)整蘭德系數(shù)
??使用 scikit-learn 中的 adjusted_rand_score 函數(shù)來計(jì)算聚類算法的調(diào)整蘭德指數(shù)(Adjusted Rand Index)。
>>> from sklearn.metrics import adjusted_rand_score
>>> adjusted_rand_score(y_true, y_pred)
??使用 adjusted_rand_score 函數(shù)計(jì)算聚類算法的調(diào)整蘭德指數(shù)。調(diào)整蘭德指數(shù)的取值范圍在 -1 到 1 之間,數(shù)值越接近 1 表示聚類結(jié)果與真實(shí)標(biāo)簽的一致性越高,而數(shù)值越接近 0 表示聚類結(jié)果與隨機(jī)劃分的一致性一樣,數(shù)值越接近 -1 表示聚類結(jié)果與真實(shí)標(biāo)簽的一致性越低。調(diào)整蘭德指數(shù)可以幫助評估聚類算法的性能,并與其他算法進(jìn)行比較。
7.3.2 同質(zhì)性
??使用 scikit-learn 中的 homogeneity_score 函數(shù)來計(jì)算聚類結(jié)果的同質(zhì)性得分(Homogeneity Score)。
>>> from sklearn.metrics import homogeneity_score
>>> homogeneity_score(y_true, y_pred)
??使用 homogeneity_score 函數(shù)計(jì)算聚類結(jié)果的同質(zhì)性得分。同質(zhì)性得分的取值范圍在 0 到 1 之間,數(shù)值越接近 1 表示聚類結(jié)果中的樣本更傾向于同屬于一個類別的聚類簇,而數(shù)值越接近 0 表示聚類結(jié)果的同質(zhì)性較差,樣本分布更分散。同質(zhì)性得分可以幫助評估聚類算法在保持同類樣本集中性方面的性能,并與其他算法進(jìn)行比較。
7.3.3 V-measure
??使用 scikit-learn 中的 v_measure_score 函數(shù)來計(jì)算聚類結(jié)果的 V-measure 分?jǐn)?shù)。
>>> from sklearn.metrics import v_measure_score
>>> v_measure_score(y_true, y_pred)
??使用 v_measure_score 函數(shù)計(jì)算聚類結(jié)果的 V-measure 分?jǐn)?shù)。V-measure 分?jǐn)?shù)的取值范圍在 0 到 1 之間,數(shù)值越接近 1 表示聚類結(jié)果的同質(zhì)性和完整性越高,而數(shù)值越接近 0 表示聚類結(jié)果的質(zhì)量較差。
7.4 交叉驗(yàn)證
??使用 scikit-learn 中的 cross_val_score 函數(shù)來進(jìn)行 交叉驗(yàn)證 并 計(jì)算模型的性能評估指標(biāo)。
>>> from sklearn.cross_validation import cross_val_score
>>> print(cross_val_score(knn, X_train, y_train, cv=4))
>>> print(cross_val_score(lr, X, y, cv=2))
??使用 cross_val_score 函數(shù)對模型進(jìn)行交叉驗(yàn)證并計(jì)算性能評估指標(biāo)。交叉驗(yàn)證可以幫助我們更全面地評估模型的性能,并確保評估指標(biāo)的可靠性。在交叉驗(yàn)證中,輸入數(shù)據(jù)會被分成若干個折(即交叉驗(yàn)證的折數(shù)),每一折輪流作為驗(yàn)證集,剩余折作為訓(xùn)練集,用于擬合模型并計(jì)算性能評估指標(biāo)。最終,所有折的性能評估指標(biāo)會被匯總,得出 模型的平均性能評估指標(biāo)。
八、模型調(diào)整
8.1 柵格搜索
??使用 scikit-learn 中的 GridSearchCV 類來進(jìn)行 網(wǎng)格搜索 和 參數(shù)調(diào)優(yōu)。
>>> from sklearn.grid_search import GridSearchCV
>>> params = {"n_neighbors": np.arange(1,3), "metric": ["euclidean", "cityblock"]}
>>> grid = GridSearchCV(estimator=knn, param_grid=params)
>>> grid.fit(X_train, y_train)
>>> print(grid.best_score_)
>>> print(grid.best_estimator_.n_neighbors)
??通過執(zhí)行這些代碼,可以使用 GridSearchCV 類對模型的參數(shù)空間進(jìn)行窮舉搜索,并找到最佳的參數(shù)組合。網(wǎng)格搜索可以幫助我們找到最優(yōu)的參數(shù)設(shè)置,從而提高模型的性能。在搜索過程中,將對每一組參數(shù)進(jìn)行交叉驗(yàn)證,并根據(jù)性能評估指標(biāo)選擇最佳的參數(shù)組合。
8.2 隨機(jī)參數(shù)優(yōu)化
??使用 scikit-learn 中的 RandomizedSearchCV 類來進(jìn)行 隨機(jī)搜索 和 參數(shù)調(diào)優(yōu)。文章來源:http://www.zghlxwxcb.cn/news/detail-729204.html
>>> from sklearn.grid_search import RandomizedSearchCV
>>> params = {"n_neighbors": range(1,5), "weights": ["uniform", "distance"]}
>>> rsearch = RandomizedSearchCV(estimator=knn, param_distributions=params, cv=4, n_iter=8, random_state=5)
>>> rsearch.fit(X_train, y_train)
>>> print(rsearch.best_score_)
??使用 RandomizedSearchCV 類對模型的參數(shù)空間進(jìn)行隨機(jī)搜索,并找到最佳的參數(shù)組合。隨機(jī)搜索相比于網(wǎng)格搜索,可以更高效地在大范圍的參數(shù)空間中尋找最佳參數(shù)組合。在搜索過程中,將對每一組參數(shù)進(jìn)行交叉驗(yàn)證,并根據(jù)性能評估指標(biāo)選擇最佳的參數(shù)組合。文章來源地址http://www.zghlxwxcb.cn/news/detail-729204.html
到了這里,關(guān)于【數(shù)據(jù)科學(xué)】Scikit-learn的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!