天天看點

scikit-learn:Python機器學習工具使用筆記,建議收藏!

作者:AI人工智能知識庫

這篇文章主要介紹了Python機器學習工具scikit-learn的使用筆記,幫助大家更好的了解和使用python,感興趣的朋友可以了解下

scikit-learn 是基于 Python 語言的機器學習工具

  • 簡單高效的資料挖掘和資料分析工具
  • 可供大家在各種環境中重複使用
  • 建立在 NumPy ,SciPy 和 matplotlib 上
  • 開源,可商業使用 - BSD許可證

sklearn 中文文檔:http://www.scikitlearn.com.cn/

官方文檔:http://scikit-learn.org/stable/

sklearn官方文檔的内容和結構如下:

scikit-learn:Python機器學習工具使用筆記,建議收藏!

sklearn是基于numpy和scipy的一個機器學習算法庫,設計的非常優雅,它讓我們能夠使用同樣的接口來實作所有不同的算法調用。

sklearn庫的四大機器學習算法:分類,回歸,聚類,降維。其中:

  • 常用的回歸:線性、決策樹、SVM、KNN ;內建回歸:随機森林、Adaboost、GradientBoosting、Bagging、ExtraTrees
  • 常用的分類:線性、決策樹、SVM、KNN,樸素貝葉斯;內建分類:随機森林、Adaboost、GradientBoosting、Bagging、ExtraTrees
  • 常用聚類:k均值(K-means)、層次聚類(Hierarchical clustering)、DBSCAN
  • 常用降維:LinearDiscriminantAnalysis、PCA

還包含了特征提取、資料處理和模型評估三大子產品。

同時sklearn内置了大量資料集,節省了擷取和整理資料集的時間。

使用sklearn進行機器學習的步驟一般分為:導入子產品-建立資料-建立模型-訓練-預測五步。

以下為代碼筆記

scikit-learn:Python機器學習工具使用筆記,建議收藏!

有需要文章學習筆記、源碼的小夥伴可如上擷取~

  • 一、資料擷取
  • *****************
  • """
  • ##1.1 導入sklearn資料集
  • from sklearn import datasets
  • iris = datasets.load.iris() #導入資料集
  • X = iris.data #獲得其特征向量
  • y = iris.target # 獲得樣本label
  • ##1.2 建立資料集
  • from sklearn.datasets.samples_generator import make_classification
  • X, y = make_classification(n_samples=6, n_features=5, n_informative=2,
  • n_redundant=2, n_classes=2, n_clusters_per_class=2, scale=1.0,
  • random_state=20)
  • # n_samples:指定樣本數
  • # n_features:指定特征數
  • # n_classes:指定幾分類
  • # random_state:随機種子,使得随機狀可重
  • # 檢視資料集
  • for x_,y_ in zip(X,y):
  • print(y_,end=': ')
  • print(x_)
  • """
  • 0: [-0.6600737 -0.0558978 0.82286793 1.1003977 -0.93493796]
  • 1: [ 0.4113583 0.06249216 -0.90760075 -1.41296696 2.059838 ]
  • 1: [ 1.52452016 -0.01867812 0.20900899 1.34422289 -1.61299022]
  • 0: [-1.25725859 0.02347952 -0.28764782 -1.32091378 -0.88549315]
  • 0: [-3.28323172 0.03899168 -0.43251277 -2.86249859 -1.10457948]
  • 1: [ 1.68841011 0.06754955 -1.02805579 -0.83132182 0.93286635]
  • """
  • """
  • *****************
  • 二、資料預處理
  • *****************
  • """
  • from sklearn import preprocessing
  • ##2.1 資料歸一化
  • data = [[0, 0], [0, 0], [1, 1], [1, 1]]
  • # 1. 基于mean和std的标準化
  • scaler = preprocessing.StandardScaler().fit(train_data)
  • scaler.transform(train_data)
  • scaler.transform(test_data)
  • # 2. 将每個特征值歸一化到一個固定範圍
  • scaler = preprocessing.MinMaxScaler(feature_range=(0, 1)).fit(train_data)
  • scaler.transform(train_data)
  • scaler.transform(test_data)
  • #feature_range: 定義歸一化範圍,注用()括起來
  • #2.2 正則化
  • X = [[ 1., -1., 2.],
  • [ 2., 0., 0.],
  • [ 0., 1., -1.]]
  • X_normalized = preprocessing.normalize(X, norm='l2')
  • print(X_normalized)
  • """
  • array([[ 0.40..., -0.40..., 0.81...],
  • [ 1. ..., 0. ..., 0. ...],
  • [ 0. ..., 0.70..., -0.70...]])
  • """
  • ## 2.3 One-Hot編碼
  • data = [[0, 0, 3], [1, 1, 0], [0, 2, 1], [1, 0, 2]]
  • encoder = preprocessing.OneHotEncoder().fit(data)
  • enc.transform(data).toarray()
  • """
  • *****************
  • 三、資料集拆分
  • *****************
  • """
  • # 作用:将資料集劃分為 訓練集和測試集
  • # 格式:train_test_split(*arrays, **options)
  • from sklearn.mode_selection import train_test_split
  • X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)
  • """
  • 參數
  • ---
  • arrays:樣本數組,包含特征向量和标簽
  • test_size:
  •   float-獲得多大比重的測試樣本 (預設:0.25)
  •   int - 獲得多少個測試樣本
  • train_size: 同test_size
  • random_state:
  •   int - 随機種子(種子固定,實驗可複現)
  • shuffle - 是否在分割之前對資料進行洗牌(預設True)
  • 傳回
  • ---
  • 分割後的清單,長度=2*len(arrays),
  •   (train-test split)
  • """
  • """
  • *****************
  • 四、定義模型
  • *****************
  • """
  • ## 模型常用屬性和工鞥呢
  • # 拟合模型
  • model.fit(X_train, y_train)
  • # 模型預測
  • model.predict(X_test)
  • # 獲得這個模型的參數
  • model.get_params()
  • # 為模型進行打分
  • model.score(data_X, data_y) # 線性回歸:R square; 分類問題: acc
  • ## 4.1 線性回歸
  • from sklearn.linear_model import LinearRegression
  • # 定義線性回歸模型
  • model = LinearRegression(fit_intercept=True, normalize=False,
  • copy_X=True, n_jobs=1)
  • """
  • 參數
  • ---
  • fit_intercept:是否計算截距。False-模型沒有截距
  • normalize: 當fit_intercept設定為False時,該參數将被忽略。 如果為真,則回歸前的回歸系數X将通過減去平均值并除以l2-範數而歸一化。
  • n_jobs:指定線程數
  • """
  • ## 4.2 邏輯回歸
  • from sklearn.linear_model import LogisticRegression
  • # 定義邏輯回歸模型
  • model = LogisticRegression(penalty='l2', dual=False, tol=0.0001, C=1.0,
  • fit_intercept=True, intercept_scaling=1, class_weight=None,
  • random_state=None, solver='liblinear', max_iter=100, multi_class='ovr',
  • verbose=0, warm_start=False, n_jobs=1)
  • """參數
  • ---
  • penalty:使用指定正則化項(預設:l2)
  • dual: n_samples > n_features取False(預設)
  • C:正則化強度的反,值越小正則化強度越大
  • n_jobs: 指定線程數
  • random_state:随機數生成器
  • fit_intercept: 是否需要常量
  • """
  • ## 4.3 樸素貝葉斯算法NB
  • from sklearn import naive_bayes
  • model = naive_bayes.GaussianNB() # 高斯貝葉斯
  • model = naive_bayes.MultinomialNB(alpha=1.0, fit_prior=True, class_prior=None)
  • model = naive_bayes.BernoulliNB(alpha=1.0, binarize=0.0, fit_prior=True, class_prior=None)
  • """
  • 文本分類問題常用MultinomialNB
  • 參數
  • ---
  • alpha:平滑參數
  • fit_prior:是否要學習類的先驗機率;false-使用統一的先驗機率
  • class_prior: 是否指定類的先驗機率;若指定則不能根據參數調整
  • binarize: 二值化的門檻值,若為None,則假設輸入由二進制向量組成
  • """
  • ## 4.4 決策樹DT
  • from sklearn import tree
  • model = tree.DecisionTreeClassifier(criterion='gini', max_depth=None,
  • min_samples_split=2, min_samples_leaf=1, min_weight_fraction_leaf=0.0,
  • max_features=None, random_state=None, max_leaf_nodes=None,
  • min_impurity_decrease=0.0, min_impurity_split=None,
  • class_weight=None, presort=False)
  • """參數
  • ---
  • criterion :特征選擇準則gini/entropy
  • max_depth:樹的最大深度,None-盡量下分
  • min_samples_split:分裂内部節點,所需要的最小樣本樹
  • min_samples_leaf:葉子節點所需要的最小樣本數
  • max_features: 尋找最優分割點時的最大特征數
  • max_leaf_nodes:優先增長到最大葉子節點數
  • min_impurity_decrease:如果這種分離導緻雜質的減少大于或等于這個值,則節點将被拆分。
  • """
  • ## 4.5 支援向量機
  • from sklearn.svm import SVC
  • model = SVC(C=1.0, kernel='rbf', gamma='auto')
  • """參數
  • ---
  • C:誤差項的懲罰參數C
  • gamma: 核相關系數。浮點數,If gamma is ‘auto' then 1/n_features will be used instead.
  • """
  • ## 4.6 k近鄰算法 KNN
  • from sklearn import neighbors
  • #定義kNN分類模型
  • model = neighbors.KNeighborsClassifier(n_neighbors=5, n_jobs=1) # 分類
  • model = neighbors.KNeighborsRegressor(n_neighbors=5, n_jobs=1) # 回歸
  • """參數
  • ---
  • n_neighbors: 使用鄰居的數目
  • n_jobs:并行任務數
  • """
  • ## 4.7 多層感覺機
  • from sklearn.neural_network import MLPClassifier
  • # 定義多層感覺機分類算法
  • model = MLPClassifier(activation='relu', solver='adam', alpha=0.0001)
  • """參數
  • ---
  • hidden_layer_sizes: 元祖
  • activation:激活函數
  • solver :優化算法{‘lbfgs', ‘sgd', ‘adam'}
  • alpha:L2懲罰(正則化項)參數。
  • """
  • """
  • *****************
  • 五、模型評估與選擇
  • *****************
  • """
  • ## 5.1 交叉驗證
  • from sklearn.model_selection import cross_val_score
  • cross_val_score(model, X, y=None, scoring=None, cv=None, n_jobs=1)
  • """參數
  • ---
  • model:拟合資料的模型
  • cv : k-fold
  • scoring: 打分參數-‘accuracy'、‘f1'、‘precision'、‘recall' 、‘roc_auc'、'neg_log_loss'等等
  • """
  • ## 5.2 檢驗曲線
  • from sklearn.model_selection import validation_curve
  • train_score, test_score = validation_curve(model, X, y, param_name, param_range, cv=None, scoring=None, n_jobs=1)
  • """參數
  • ---
  • model:用于fit和predict的對象
  • X, y: 訓練集的特征和标簽
  • param_name:将被改變的參數的名字
  • param_range: 參數的改變範圍
  • cv:k-fold
  • 傳回值
  • ---
  • train_score: 訓練集得分(array)
  • test_score: 驗證集得分(array)
  • """
  • """
  • *****************
  • 六、儲存模型
  • *****************
  • """
  • ## 6.1 儲存為pickle檔案
  • import pickle
  • # 儲存模型
  • with open('model.pickle', 'wb') as f:
  • pickle.dump(model, f)
  • # 讀取模型
  • with open('model.pickle', 'rb') as f:
  • model = pickle.load(f)
  • model.predict(X_test)
  • ## 6.2 sklearn方法自帶joblib
  • from sklearn.externals import joblib
  • # 儲存模型
  • joblib.dump(model, 'model.pickle')
  • #載入模型
  • model = joblib.load('model.pickle')

以上就是Python機器學習工具scikit-learn的使用筆記的詳細内容,更多關于Python機器學習工具scikit-learn的資料請關注小編其它相關文章!