Python的Sklearn庫的基本用法


Sklearn庫是基於Python的第三方庫,它包括機器學習開發的各個方面。

機器學習的開發基本分為六個步驟,1)獲取數據,2)數據處理,3)特征工程,4)機器學習的算法訓練(設計模型),5)模型評估,6)應用。

機器學習的算法一般分為兩種:一種既有目標值又有特征值的算法稱之為監督學習,另一種只有特征值的算法稱之為無監督學習。而監督學習還可以繼續細分為分類算法和回歸算法。

1)獲取數據⑤

Sklearn中獲取數據集使用的包為Sklearn.datasets,之后可以接load_* 和fetch_*從Sklearn為初學者提供的數據集中獲取數據。

其中,load獲取的是小規模的數據集,fetch獲取的是大規模的數據集。

  from sklearn.datasets import load_iris

  iris=load_iris()

  from sklearn.datasets import fetch_20newsgroups

  news=fetch_20newsgroups

  獲取數據可以調用的方法:

    .data 特征數據數組

    .data.shape 特征值的數量

    .target 目標值數組

    .DESCR 數據描述

    .feature_names 特征值的名字

    .target_names 目標值的名字

  數據集的返回值:

    datasets.base.Bunch(繼承自字典的格式)

    dict["key"]= values

    bunch.key=values 

    可以獲取對應的值

2)數據處理

  獲取后的數據不是可以直接使用,機器學習的模型獲取需要在訓練集中進行訓練得出模型,而后在測試集中進行測試,所以得到的數據集需要進行划分:

  Sklearn中提供可用於對數據集划分訓練集和測試集的方法:

  Sklearn.model_selection.train_test_split()

    輸入值x為數據集的特征值

    輸入值y為數據集的目標值

    test_size 測試集的大小,一般為float

    random_state 隨機數種子,不用的隨機數種子會產生不同的隨機采樣結果。

    返回值的按照順序為:訓練集特征值,測試集特征值,訓練集目標值,測試集目標值

    from sklearn.model_selection import train_test_split

    x_train,x_test,y_train,y_test=train_test_split(iris.data,iris.target,random_state=22)

3)特征工程

  pandas:一個非常方便的讀取數據並進行基本的處理的工具

  Sklearn:提供了很強大的特征處理的接口

特征提取:

  ①字典特征提取:Sklearn.feature_extraction.DictVectorizer

    DictVectorizer.fit_transform()

    輸入值為字典或者包含字典的迭代器

    返回值為sparse矩陣,可以使用False改變返回值的類型為二維數組

    DictVectorizer.inverse_transform()

    輸入值為數組或者sparse矩陣

    返回值為轉換之前的數據格式

    DictVectorizer.get_feature_names()  

    返回值為類別的名稱

  應用的場景:1.類別較多,將數據集的特征轉化為字典類型,再利用DictVectorizer進行轉換

        2.拿到的是字典類型的數據

  ②文本特征提取:Sklearn.feature_extraction.text.CountVectorizer(stop_words[])

    stop_words:停用詞指的是指定的詞不在做為文本特征提取的處理對象

    CountVectorizer.transfer.fit_transform()

    輸入值為文本字典或者包含文本字符串的迭代器

    返回值為sparse矩陣,sparse矩陣使用toarray方法可以直接轉換為二維數組

    CountVectorizer.inverse_transform()

    輸入值為數組或者sparse矩陣

    返回值為轉換之前的數據格式

    CountVectorizer.get_feature_names

    返回值為類別的名稱

  中文分詞可以使用jieba庫,實現字符串的轉換分詞。

  TFIDF文本特征抽取,利用詞在一個文章中使用頻率與別的文章有很大區別,來實現特征的提取。

  TFIDF文本特征提取的方法:Sklearn.feature_extraction.text.TfidfVectorizer(stop_words[])

    TfidfVectorizer.transfer.fit_transform()

    輸入值為文本字典或者包含文本字符串的迭代器

    返回值為sparse矩陣,sparse矩陣使用toarray方法可以直接轉換為二維數組

    TfidfVectorizer.inverse_transform()

    輸入值為數組或者sparse矩陣

    返回值為轉換之前的數據格式

    TfidfVectorizer.get_feature_names

    返回值為類別的名稱

特征預處理:

  ①歸一化:sklearn.preprocessing.MinMaxScaler(feature_range=(0,1)....)

    feature_range=(0,1)數據處理后的范圍

    MinMaxScaler.fit_traensform()

    輸入值為numpy array格式的數據[n_samples,n_features]   [樣本數,特征數]         

    返回值為形狀相同的array

    缺點:這種方式會受到異常值的很大的影響。

  ②標准化:sklearn.preprocessing.StandardScaler

    不用指定范圍會直接將數據處理到(0,1)的范圍內,均值為0,標准差為1

    StandardScaler.fit_traensform()

    輸入值為numpy array格式的數據[n_samples,n_features]   [樣本數,特征數]         

    返回值為形狀相同的array

    標准化的方法比較適合大數據的處理,在樣本足夠多的情況下比較穩定。

特征降維:

  指的是降低特征的個數,除去不相關的特征。

  Filter過濾式降維方法:

  ①方差過濾式降維:sklearn.feature_selection.VarianceThreshold(threshold=0.0)

    VarianceThreshold.fit_transform()

    輸入值為numpy array格式的數據[n_samples,n_features]   [樣本數,特征數]

    返回值為刪除了低方差特征的特征后的數組   

  ②相關系數過濾式降維:

    相關系數的計算方法:scipy.stats.pearsonr(x,y)

    輸入值為數據的特征的名稱

  ③主成分分析(PCA)

  sklearn.decomposition.PCA(n_components=None)

  將數據進行處理,實現數據的降維。

    n_components:

    小數:保留百分之多少的信息

    整數:減少到剩余多少個信息

    PCA.fit_transform()

    輸入值為numpy array格式的數據[n_samples,n_features]   [樣本數,特征數]

    返回值為轉換之后為指定維數的數組 

4)機器學習的算法訓練(設計模型)

Sklearn中算法訓練的基本使用:

  1.實例化一個estimator類

  2.estimator調用fit()方法,對送入的x_train,y_train值進行訓練

  3.模型評估:y_predict=estimator.(x_test)

        y_predict==y_test

  或:accuracy=estimator.score(x_test,y_test)計算出准確率

分類算法:

  ①KNN算法:

  sklearn.neighbors.KNeighborsClassifier(n_neighbors=5,algorithm='auto')

    n_neighbors為K值,algorithm默認為auto,一般不用設置,會選擇最佳的算法

    優點:簡單易於理解,易於實現

    缺點:懶惰算法,計算量大,內存的開銷比較大,K值的選擇不一定,需要找到最適合K值才能實現好的結果。

  ②網格搜索與交叉驗證:

  sklearn.model_selection.GridSearchCV(estimator,param_grid=None,cv=None)

    返回值為estiamtor對象

    estimator:預估器對象

    param_grid:預估器參數{"n_neighbors":[1,3,5,7,9]}

    cv:進行交叉驗證的折數

    可使用的方法:

    .fit()輸入訓練數據進行訓練

    .score()輸出訓練的准確率

    最佳參數:best_param_

    最佳結果:best_score_

    最佳預估器 :best_estimator_

    交叉驗證結果:cv_results_   

  ③朴素貝葉斯算法:認定各個特征之間是相互獨立的。

   拉普拉斯平滑系數:分子加上α,分母加上mα(訓練文檔中特征詞出現的個數,α值常為1)

   sklearn.naive_bayes.MultinomialNB(alpha=1.0)

     優點:分類效率穩定,對缺失數據不太敏感,算法也比較簡單,常用於文本分類

     缺點:由於假設了特征之間的相互獨立,如果所用的數據集中的特征之間存在關聯,就會產生不合適的結果

  ④決策樹:通過將特征進行排序,將影響更大的特征優先進行考慮,可以使用信息增益(信息熵-條件信息熵)作為判定的依據

   sklearn.tree.DecisionTreeClassifier(criterion='gini',max_depth=None,random_state=None)

    criterion:默認為'gini',作為判定的依據,也可以改為'entropy'即為信息增益

    max_depth:樹的深度大小(可以通過改變深度大小,減小決策樹的過擬合)

    random_state:隨機數種子

   決策樹的可視化:

   sklearn.tree.export_graphviz(estimator,out_file="tree.dot ",feature_names)

    feature_names在輸入之后才能顯示在對應的位置

    優點:簡單易理解,可以實現可視化

    缺點:沒有設置深度,容易產生過擬合

  ⑤隨機森林:訓練集隨機:隨機有放回抽樣;特征隨機:從M個特征中,抽取m個特征,M>>m

   sklearn.ensemble.RandomForestClassifier(n_estimator=10,criterion='gini',max_depth=None,bootstrap=True,random_state=None,min_sample_lit=2)

    max_features="auto":默認為“auto”,每個決策樹的最大特征數量,即為m值得選取方法。

      if"auto",求平方根;if"sqrt",求平方根;if"log2",求log2();if None,使用M值

    {"n_estimators":[120,200,300,500,800,1200],"max_depth":[5,8,10,15,30]}

   優點:具有很好的准確率,處理高維樣本很有優勢

回歸算法:

  ①線性回歸:將目標值和特征值當做線性關系,來實現擬合,得到回歸算法。線性模型不等於線性關系,參數一致的非線性關系也可以稱作線性模型。

    正規方程:sklearn.linear_model.LinearRegression(fit_intercept=True)

      fit_intercept:是否計算偏置

      LinearRegression.coef_:回歸系數

      LinearRegression.intercept_:偏置

    梯度下降:sklearn.linear_model.SGDRegressor(loss="squared_loss",fit_intercept=True,learning_rate='invscaling',eta0=0.01)

      loss:損失類型,squared_loss最小二乘法的損失函數類型

      max_iter:迭代次數

      fit_intercept:是否計算偏置

      learning_rate:string,optional(指的是步長)

      'constant':eta=eta0

      ''optional":eta=1.0/(alpha*(t+t0))[defult]

      'invscaling':eta=eta0/pow(t,power_t) power_t=0.25

      SGDRegressor.coef_:回歸系數

      SGDRegressor.intercept_:偏置

    模型評估方法(均方誤差評估):sklearn.metrics.mean_squared_error(y_true,y_pre)

      y_true:真實值

      y_pre:預測值

      return:浮點數結果

  ②嶺回歸:進行正則化處理時削弱某些特征值的作用,從而結果過擬合與欠擬合的問題。

      L1正則化:直接刪除,L2正則化:削弱作用

      sklearn.linear_model.Ridge(alpha=1.0,fit_intercept=True,solver"auto",normolize=False)

      alpha:正則化力度,也叫λ取值0~1或者1~10

      solver:會根據數據集自動選擇優化方法

      normalize:數據是否進標准化,如果設置為True就不用再前面進行標准化,實現效果是一樣的

      Ridge.coef_:回歸系數

      Ridge.intercept_:偏置

      Ridge方法相當於SGDRegressor(penalty='l2',loss="squared_loss"),但是后者缺少可SAG

  ③邏輯回歸:sklearn.linear_model.LogisticRegression(solver="liblinear",penalty="l2"C=1.0)

      solver:優化求解方式

      penalty:正則化種類

      C:正則化力度

  模型評估(精確率和召回率):sklearn.metrics.classification_report(y_true,y_pre,lables[],targer_names=None)

      lables:指定類別對應的數字

      target_names:目標類別名稱

      return:每個類別的精確率和召回率

  模型評估(ROC曲線和AUC指標):sklearn.metrics.roc_auc_score(y_true,y_score)    

      y_true=每個樣本的真實類別,必須為0(反例),1(正例)

      y_score=預測得分,可以是正例的估計概率,置信值,分類器方法的返回值

      AUC只能用來評估二分類的問題,非常適合評價樣本不均衡中的分類器性能

模型保存和加載:sklearn.externals. joblib

      保存模型:joblib.dump(estimator,"my_ridge.pkl")

      加載模型:estimator=joblib.load("my_ridge.pkl")

無監督學習:

  K-means算法:sklearn.cluster.KMeans(n_clusters=8)

      n_clusters:聚類中心的數量

      _lables_:默認標記的類型,可以和真實值進行比較

  模型評估:高內聚,低耦合(外部距離最大化,內部距離最小化)

      sklearn.metrics.silhouette_score(X,labels)輪廓系數

      X:特征值

      labels:被聚類標記的目標值

 

      

    

 

      

  

  

    

       

   

    

 

 

 

 

 

 

 

 

 

 

 

        

  

  

  

  

  

  

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM