机器学习-基础知识、sklearn库、评估指标、python数据处理库
文章目錄
- 1. 機器學習基本概念
- 1.1. 常用算法
- 1.2. 基本概念
- 1.3. 機器學習步驟框架
- 1.4. 機器學習中分類和預測算法的評估
- 1.5. 分類與回歸問題
- 2. sklearn機器學習庫
- 2.1. 定義
- 2.2. sklearn數據類型
- 2.3. sklearn總覽
- 2.3.1. 數據預處理
- 2.3.2. 數據集
- 2.3.3. 特征選擇
- 2.3.4. 特征降維
- 2.3.5. 模型構建
- (1)分類模型
- (2)回歸模型
- (3)聚類模型
- 2.3.6. 模型評估
- 2.3.7. 模型優化
- 3. 評估指標
- 3.1. 各種算法的評估指標
- 3.2. 分類任務
- 3.3. 回歸任務
- 3.4. 無監督任務
- 4. 機器學習用到的python庫
- 4.1. Numpy
- 4.2. Pandas
- 4.3. Matplotlib
1. 機器學習基本概念
1.1. 常用算法
- 線性回歸(Linear Regression)
- 邏輯回歸(Logistic Regression)
- 聚類(k-means,DBSCAN)
- 決策樹(Decision Tree)
- 集成算法(Random forest ,AdaBoost,Gradient Boosting)
- 支持向量機(Support Vector Machine)
- k近鄰(K-Nearest Neighbors)
- 線性判別分析(Linear Discriminant Analysis)
- 樸素貝葉斯(Bayes Theorem)
1.2. 基本概念
-
訓練集:又稱訓練樣例,用來進行訓練,也就是產生模型或者算法的數據集
-
測試集:又稱測試樣例,用來專門進行測試已經學習好的模型或者算法的數據集
-
特征值:屬性的集合,通常用一個向量來表示,附屬于一個實例
-
標記:實例類別的標記(正例與反例或者更多)
-
分類:目標標記為類別型數據
-
回歸:目標標記為連續型數值
-
有監督學習:訓練集有類別標記
-
無監督學習:訓練集無類別標記
-
半監督學習:訓練集既有有類別標記又有無類別標記
1.3. 機器學習步驟框架
1.4. 機器學習中分類和預測算法的評估
- 準確性
- 速度
- 強壯性
- 可規模性
- 可解釋性
1.5. 分類與回歸問題
2. sklearn機器學習庫
2.1. 定義
-
簡介:sklearn是基于python語言的機器學習工具包,是目前做機器學習項目當之無愧的第一工具。 sklearn自帶了大量的數據集,可供我們練習各種機器學習算法。 sklearn集成了數據預處理、數據特征選擇、數據特征降維、分類\回歸\聚類模型、模型評估等非常全面算法。
分類:識別某個對象屬于哪個類別,常用的算法有:SVM(支持向量機),nearest neighbors(最近鄰)、random forest(隨機森林)
回歸:預測與對象相關聯的連續值屬性,常用算法:SVR(支持向量機), ridge regression(嶺回歸)、Lasso
聚類:將相似對象自動分組,常用算法: k-Means、 spectral clustering、mean-shift
降維:減少要考慮的隨機變量的數量,PCA(主成分分析), eature selection(特征選擇)、non-negative matrix factorization(非負矩陣分解)
模型選擇:比較,驗證,選擇參數和模型,常用的模塊有:grid search(網格搜索)、cross validation(交叉驗證)、 metrics(度量)
預處理:特征提取和歸一化,把輸入的數據轉換為機器學習算法可用的數據
2.2. sklearn數據類型
機器學習最終處理的數據都是數字,只不過這些數據可能以不同的形態被呈現出來,如矩陣、文字、圖片、視頻、音頻等。
2.3. sklearn總覽
2.3.1. 數據預處理
-
sklearn.preprocessing
函數功能 preprocessing.scale( ) 標準化 preprocessing.MinMaxScaler( ) 最大最小值標準化 preprocessing.StandardScaler( ) 數據標準化 preprocessing.MaxAbsScaler( ) 絕對值最大標準化 preprocessing.RobustScaler( ) 帶離群值數據集標準化 preprocessing.QuantileTransformer( ) 使用分位數信息變換特征 preprocessing.PowerTransformer( ) 使用冪變換執行到正態分布的映射 preprocessing.Normalizer( ) 正則化 preprocessing.OrdinalEncoder( ) 將分類特征轉換為分類數值 preprocessing.LabelEncoder( ) 將分類特征轉換為分類數值 preprocessing.MultiLabelBinarizer( ) 多標簽二值化 preprocessing.OneHotEncoder( ) 獨熱編碼 preprocessing.KBinsDiscretizer( ) 將連續數據離散化 preprocessing.FunctionTransformer( ) 自定義特征處理函數 preprocessing.Binarizer( ) 特征二值化 preprocessing.PolynomialFeatures( ) 創建多項式特征 preprocesssing.Normalizer( ) 正則化 preprocessing.Imputer( ) 彌補缺失值 -
sklearn.svm
函數介紹 svm.OneClassSVM( ) 無監督異常值檢測 上述preprocessing類函數的方法如下:
函數方法介紹 xxx.fit( ) 擬合數據 xxx.fit_transform( ) 擬合并轉換數據 xxx.get_params( ) 獲取函數參數 xxx.inverse_transform( ) 逆轉換 xxx.set_params( ) 設置參數 xxx.transform( ) 轉換數據
2.3.2. 數據集
- sklearn.datasets
獲取小數據集(本地加載):datasets.load_xxx()
獲取大數據集(在線下載):datasets.fetch_xxx()
本地生成數據集(本地構造):datasets.make_xxx()
| load_iris( ) | 鳶尾花數據集:3類、4個特征、150個樣本 |
| load_boston( ) | 波斯頓房價數據集:13個特征、506個樣本 |
| load_digits( ) | 手寫數字集:10類、64個特征、1797個樣本 |
| load_breast_cancer( ) | 乳腺癌數據集:2類、30個特征、569個樣本 |
| load_diabets( ) | 糖尿病數據集:10個特征、442個樣本 |
| load_wine( ) | 紅酒數據集:3類、13個特征、178個樣本 |
| load_files( ) | 加載自定義的文本分類數據集 |
| load_linnerud( ) | 體能訓練數據集:3個特征、20個樣本 |
| load_sample_image( ) | 加載單個圖像樣本 |
| load_svmlight_file( ) | 加載svmlight格式的數據 |
| make_blobs( ) | 生成多類單標簽數據集 |
| make_biclusters( ) | 生成雙聚類數據集 |
| make_checkerboard( ) | 生成棋盤結構數組,進行雙聚類 |
| make_circles( ) | 生成二維二元分類數據集 |
| make_classification( ) | 生成多類單標簽數據集 |
| make_friedman1( ) | 生成采用了多項式和正弦變換的數據集 |
| make_gaussian_quantiles( ) | 生成高斯分布數據集 |
| make_hastie_10_2( ) | 生成10維度的二元分類數據集 |
| make_low_rank_matrix( ) | 生成具有鐘形奇異值的低階矩陣 |
| make_moons( ) | 生成二維二元分類數據集 |
| make_multilabel_classification( ) | 生成多類多標簽數據集 |
| make_regression( ) | 生成回歸任務的數據集 |
| make_s_curve( ) | 生成S型曲線數據集 |
| make_sparse_coded_signal( ) | 生成信號作為字典元素的稀疏組合 |
| make_sparse_spd_matrix( ) | 生成稀疏堆成的正定矩陣 |
| make_sparse_uncorrelated( ) | 使用稀疏的不相關設計生成隨機回歸問題 |
| make_spd_matrix( ) | 生成隨機堆成的正定矩陣 |
| make_swiss_roll( ) | 生成瑞士卷曲線數據集 |
2.3.3. 特征選擇
-
sklean.feature_selection
函數功能 feature_selection.SelectKBest( ) feature_selection.chi2 ( )feature_selection.f_regression( ) feature_selection.mutual_info_regression( ) 選擇K個得分最高的特征 feature_selection.VarianceThreshold( ) 無監督特征選擇 feature_selection.REF( ) 遞歸式特征消除 feature_selection.REFCV( ) 遞歸式特征消除交叉驗證法 feature_selection.SelectFromModel( ) 特征選擇
2.3.4. 特征降維
-
sklearn.decomposition
函數功能 decomposition.PCA( ) 主成分分析 decomposition.KernelPCA( ) 核主成分分析 decomposition.IncrementalPCA( ) 增量主成分分析 decomposition.MiniBatchSparsePCA( ) 小批量稀疏主成分分析 decomposition.SparsePCA( ) 稀疏主成分分析 decomposition.FactorAnalysis( ) 因子分析 decomposition.TruncatedSVD( ) 截斷的奇異值分解 decomposition.FastICA( ) 獨立成分分析的快速算法 decomposition.DictionaryLearning( ) 字典學習 decomposition.MiniBatchDictonaryLearning( ) 小批量字典學習 decomposition.dict_learning( ) 字典學習用于矩陣分解 decomposition.dict_learning_online( ) 在線字典學習用于矩陣分解 decomposition.LatentDirichletAllocation( ) 在線變分貝葉斯算法的隱含迪利克雷分布 decomposition.NMF( ) 非負矩陣分解 decomposition.SparseCoder( ) 稀疏編碼 -
sklearn.manifold
函數功能 manifold.LocallyLinearEmbedding( ) 局部非線性嵌入 manifold.Isomap( ) 流形學習 manifold.MDS( ) 多維標度法 manifold.t-SNE( ) t分布隨機鄰域嵌入 manifold.SpectralEmbedding( ) 頻譜嵌入非線性降維
2.3.5. 模型構建
(1)分類模型
-
sklearn.tree
函數功能 tree.DecisionTreeClassifier() 決策樹 -
sklearn.ensemble
函數功能 ensemble.BaggingClassifier() 裝袋法集成學習 ensemble.AdaBoostClassifier( ) 提升法集成學習 ensemble.RandomForestClassifier( ) 隨機森林分類 ensemble.ExtraTreesClassifier( ) 極限隨機樹分類 ensemble.RandomTreesEmbedding( ) 嵌入式完全隨機樹 ensemble.GradientBoostingClassifier( ) 梯度提升樹 ensemble.VotingClassifier( ) 投票分類法 -
sklearn.linear_model
函數功能 linear_model.LogisticRegression( ) 邏輯回歸 linear_model.Perceptron( ) 線性模型感知機 linear_model.SGDClassifier( ) 具有SGD訓練的線性分類器 linear_model.PassiveAggressiveClassifier( ) 增量學習分類器 -
sklearn.svm
函數功能 svm.SVC( ) 支持向量機分類 svm.NuSVC( ) Nu支持向量分類 svm.LinearSVC( ) 線性支持向量分類 -
sklearn.neighbors
函數功能 neighbors.NearestNeighbors( ) 無監督學習臨近搜索 neighbors.NearestCentroid( ) 最近質心分類器 neighbors.KNeighborsClassifier() K近鄰分類器 neighbors.KDTree( ) KD樹搜索最近鄰 neighbors.KNeighborsTransformer( ) 數據轉換為K個最近鄰點的加權圖 -
sklearn.discriminant_analysis
函數功能 discriminant_analysis.LinearDiscriminantAnalysis( ) 線性判別分析 discriminant_analysis.QuadraticDiscriminantAnalysis( ) 二次判別分析 -
sklearn.gaussian_process
函數功能 gaussian_process.GaussianProcessClassifier( ) 高斯過程分類 -
sklearn.naive_bayes
函數功能 naive_bayes.GaussianNB( ) 樸素貝葉斯 naive_bayes.MultinomialNB( ) 多項式樸素貝葉斯 naive_bayes.BernoulliNB( ) 伯努利樸素貝葉斯
(2)回歸模型
-
sklearn.tree
函數功能 tree.DecisionTreeRegress( ) 回歸決策樹 tree.ExtraTreeRegressor( ) 極限回歸樹 -
sklearn.ensemble
函數功能 ensemble.GradientBoostingRegressor( ) 梯度提升法回歸 ensemble.AdaBoostRegressor( ) 提升法回歸 ensemble.BaggingRegressor( ) 裝袋法回歸 ensemble.ExtraTreeRegressor( ) 極限樹回歸 ensemble.RandomForestRegressor( ) 隨機森林回歸 -
sklearn.linear_model
函數功能 linear_model.LinearRegression( ) 線性回歸 linear_model.Ridge( ) 嶺回歸 linear_model.Lasso( ) 經L1訓練后的正則化器 linear_model.ElasticNet( ) 彈性網絡 linear_model.MultiTaskLasso( ) 多任務Lasso linear_model.MultiTaskElasticNet( ) 多任務彈性網絡 linear_model.Lars( ) 最小角回歸 linear_model.OrthogonalMatchingPursuit( ) 正交匹配追蹤模型 linear_model.BayesianRidge( ) 貝葉斯嶺回歸 linear_model.ARDRegression( ) 貝葉斯ADA回歸 linear_model.SGDRegressor( ) 隨機梯度下降回歸 linear_model.PassiveAggressiveRegressor( ) 增量學習回歸 linear_model.HuberRegression( ) Huber回歸 -
sklearn.svm
函數功能 svm.SVR( ) 支持向量機回歸 svm.NuSVR( ) Nu支持向量回歸 svm.LinearSVR( ) 線性支持向量回歸 -
sklearn.neighbors
函數功能 neighbors.KNeighborsRegressor( ) K近鄰回歸 neighbors.RadiusNeighborsRegressor( ) 基于半徑的近鄰回歸 -
sklearn.kernel_ridge
函數功能 kernel_ridge.KernelRidge( ) 內核嶺回歸 -
sklearn.gaussian_process
函數功能 gaussian_process.GaussianProcessRegressor( ) 高斯過程回歸 -
sklearn.cross_decomposition
函數功能 cross_decomposition.PLSRegression( ) 偏最小二乘回歸
(3)聚類模型
-
sklearn.cluster
函數功能 cluster.DBSCAN( ) 基于密度的聚類 cluster.GaussianMixtureModel( ) 高斯混合模型 cluster.AffinityPropagation( ) 吸引力傳播聚類 cluster.AgglomerativeClustering( ) 層次聚類 cluster.Birch( ) 利用層次方法的平衡迭代聚類 cluster.KMeans( ) K均值聚類 cluster.MiniBatchKMeans( ) 小批量K均值聚類 cluster.MeanShift( ) 平均移位聚類 cluster.OPTICS( ) 基于點排序來識別聚類結構 cluster.SpectralClustering( ) 譜聚類 cluster.Biclustering( ) 雙聚類 cluster.ward_tree( ) 集群病房樹 -
模型方法
方法功能 xxx.fit( ) 模型訓練 xxx.get_params( ) 獲取模型參數 xxx.predict( ) 預測新輸入數據 xxx.score( ) 評估模型分類/回歸/聚類模型 xxx.set_params( ) 設置模型參數
2.3.6. 模型評估
-
分類模型評估
函數功能 metrics.accuracy_score( ) 準確率 metrics.average_precision_score( ) 平均準確率 metrics.log_loss( ) 對數損失 metrics.confusion_matrix( ) 混淆矩陣 metrics.classification_report( ) 分類模型評估報告:準確率、召回率、F1-score metrics.roc_curve( ) 受試者工作特性曲線 metrics.auc( ) ROC曲線下面積 metrics.roc_auc_score( ) AUC值 -
回歸模型評估
函數功能 metrics.mean_squared_error( ) 平均決定誤差 metrics.median_absolute_error( ) 中值絕對誤差 metrics.r2_score( ) 決定系數 -
聚類模型評估
函數功能 metrics.adjusted_rand_score( ) 隨機蘭德調整指數 metrics.silhouette_score( ) 輪廓系數
2.3.7. 模型優化
| model_selection.cross_val_score( ) | 交叉驗證 |
| model_selection.LeaveOneOut( ) | 留一法 |
| model_selection.LeavePout( ) | 留P法交叉驗證 |
| model_selection.GridSearchCV( ) | 網格搜索 |
| model_selection.RandomizedSearchCV( ) | 隨機搜索 |
| model_selection.validation_curve( ) | 驗證曲線 |
| model_selection.learning_curve( ) | 學習曲線 |
3. 評估指標
3.1. 各種算法的評估指標
3.2. 分類任務
二分類問題的混淆矩陣:
TP代表正樣本中預測正確的樣本個數;FN代表正樣本中預測錯誤的樣本個數;FP代表負樣本中預測錯誤的樣本個數;TN代表父樣本中預測正確的樣本個數,以下的公式基本都基于混淆矩陣而言。
準確率:準確率表示的是分類正確的比例(所有樣本),但是在樣本不平衡的情況下,并不能作為很好的指標來衡量結果。
Accuracy=TP+TNTP+TN+FP+FNAccuracy=\frac{TP+TN}{TP+TN+FP+FN} Accuracy=TP+TN+FP+FNTP+TN?
對應sklearn包 :
sklearn.metrics.accuracy_score(y_true, y_pred, *, normalize=True, sample_weight=None)
參數:
| y_true | 1d array-like, or label indicator array / sparse matrix 真實標簽。 |
| y_pred | 1d array-like, or label indicator array / sparse matrix 預測標簽,由分類器返回。 |
| normalize | bool, optional (default=True) 如果為False,則返回正確分類的樣本數。否則,返回正確分類的樣本的分數。 |
| sample_weight | array-like of shape (n_samples,), default=None 樣本權重。 |
返回值:
| score | float 如果normalize == True,則返回正確分類的樣本的分數(浮點數),否則返回正確分類的樣本數(整數)。 最佳性能,在normalize == True時,為1;在normalize == False時,為樣本數量。 |
精確率(查準率):精確率代表的是預測為正樣本的樣本總體中預測正確的占比(正樣本)。
Precision=TPTP+FPPrecision=\frac{TP}{TP+FP} Precision=TP+FPTP?
對應sklearn包 :
sklearn.metrics.precision_score(y_true, y_pred, *, labels=None, pos_label=1, average='binary', sample_weight=None, zero_division='warn')
參數:
| y_true | 1d array-like, or label indicator array / sparse matrix 真實目標值。 |
| y_pred | 1d array-like, or label indicator array / sparse matrix 分類器返回的估計目標。 |
| labels | list, optional 當average!='binary’時要包括的一組標簽,如果average是None,則為標簽的順序。可以排除數據中存在的標簽,例如,以忽略多數否定類的方式計算多類平均值,而數據中不存在的標簽將導致宏平均值中的0成分。對于多標簽目標,標簽是列索引。 默認情況下,y_true和y_pred中的所有標簽均按排序順序使用。 在版本0.17中進行了更改:針對多類問題改進了參數標簽。 |
| pos_label | str or int, 1 by default average ='binary’且數據為二進制的報告類。如果數據是多類或多標簽的,則將被忽略; 設置labels= [pos_label]和average!='binary’將僅報告該標簽的分數。 |
| average | string, [None|‘binary’ (default)| ‘micro’| ‘macro’| ‘samples’|‘weighted’] 對于多類/多標簽目標,此參數是必需的。如果為None,則返回每個班級的分數。否則,將根據數據的平均表現確定類型: - 'binary': 僅報告由pos_label指定的類的結果。僅當目標(y_ {true,pred})為二進制時才適用。 - 'micro': 通過計算真正例、假負例和假正例的總數來全局計算指標。 - 'macro': 計算每個標簽的指標,并找到其未加權平均值。 沒有考慮標簽不平衡。 - 'weighted': 計算每個標簽的指標,并找到它們受支持的平均權重(每個標簽的真實實例數)。這會更改‘macro’以解決標簽不平衡的問題;這可能導致F-score不在精確度和召回率之間。 - 'samples': 計算每個實例的指標,并找到它們的平均值(僅對不同于accuracy_score的多標簽分類有意義)。 |
| sample_weight | array-like of shape (n_samples,), default=None 樣本權重。 |
| zero_division | “warn”, 0 or 1, default=”warn” 設置零分頻時返回的值。如果設置為“ warn”,則該值為0,但也會發出警告。 |
返回值:
| precision | float (if average is not None) or array of float, shape = [n_unique_labels] 二進制分類中正類的精度,或者多類任務的每個類的精度的加權平均值。 |
召回率(查全率):召回率代表的是實際為正樣本的樣本總體中預測正確的占比。精確度與召回率是一對矛盾的度量,一般來說,精確率高的時候,召回率往往偏低;精確率低的時候,召回率往往偏高。
Recall=TPTP+FNRecall=\frac{TP}{TP+FN} Recall=TP+FNTP?
對應sklearn包 :
sklearn.metrics.recall_score(y_true, y_pred, *, labels=None, pos_label=1, average='binary', sample_weight=None, zero_division='warn')
參數:
| y_true | 1d array-like, or label indicator array / sparse matrix 真實目標值。 |
| y_pred | 1d array-like, or label indicator array / sparse matrix 分類器返回的估計目標。 |
| labels | list, optional 當average!='binary’時要包括的一組標簽,如果average是None,則是標簽的順序。可以排除數據中存在的標簽,例如,以忽略多數否定類的方式計算多類平均值,而數據中不存在的標簽將導致宏平均值中的0成分。對于多標簽目標,標簽是列索引。 默認情況下,y_true和y_pred中的所有標簽均按排序順序使用。 在版本0.17中進行了更改:針對多類問題改進了參數標簽。 |
| pos_label | str or int, 1 by default average ='binary’且數據為二進制的報告類。如果數據是多類或多標簽的,則將被忽略; 設置labels=[pos_label]和average!='binary’將僅報告該標簽的分數。 |
| average | string, [None|‘binary’ (default)| ‘micro’| ‘macro’| ‘samples’|‘weighted’] 對于多類/多標簽目標,此參數是必需的。如果為None,則返回每個類的得分。否則,將根據數據的平均表現確定類型: - 'binary': 僅報告由pos_label指定的類的結果。僅當目標(y_ {true,pred})為二進制時才適用。 - 'micro': 通過計算真正例、假負例和假正例的總數來全局計算度量。 - 'macro': 計算每個標簽的度量,并找到其未加權平均值。 這沒有考慮標簽不平衡。 - 'weighted': 計算每個標簽的度量,并找到它們受支持的平均權重(每個標簽的真實實例數)。這會更改‘macro’以解決標簽不平衡的問題;這可能導致F-score不在精確度和召回率之間。 - 'samples': 計算每個實例的度量,并找到它們的平均值(僅對不同于accuracy_score的多標簽分類有意義)。 |
| sample_weight | array-like of shape (n_samples,), default=None 樣本權重。 |
| zero_division | “warn”, 0 or 1, default=”warn” 設置零分頻時返回的值。如果設置為“ warn”,則該值為0,但也會發出警告。 |
返回值:
| recall | float (if average is not None) or array of float, shape = [n_unique_labels] 二進制分類中的正例類的召回率或多類別任務的每個類別的召回率加權平均 |
P-R曲線:以查準率為縱軸,查全率為橫軸,就得到了查準率-查全率曲線,又被稱為P-R曲線。P-R曲線能直觀地顯示出學習器在樣本總體上的查全率、查準率。如下圖,學習器A優于學習器C(學習器A的曲線完全包住學習器C),但是學習器A與B很難比較,因為出現了交叉,平衡點(BEP)也就是查準率等于查全率的時候,對應的坐標值,坐標值大的相對優一點。但BEP過于簡化,因此常用F1。
對應sklearn包 :
sklearn.metrics.average_precision_score(y_true, y_score, *, average='macro', pos_label=1, sample_weight=None)
參數:
| y_true | array, shape = [n_samples] or [n_samples, n_classes] 真正的二進制標簽或二進制標簽指示符。 |
| y_score | array, shape = [n_samples] or [n_samples, n_classes] 目標分數可以是肯定類別的概率估計值,置信度值或決策的非閾值度量(如某些分類器上的“ decision_function”所返回)。 |
| average | string, [None, ‘micro’, ‘macro’ (default), ‘samples’, ‘weighted’] 如果為None,則返回每類的得分。否則,將確定對數據平均表現的類型: - ‘micro’: 通過將標簽指標矩陣的每個元素都視為標簽來全局計算指標。 - ‘macro’: 計算每個標簽的指標,并找到其未加權平均值。此處沒有考慮標簽不平衡問題。 - ‘weighted’: 計算每個標簽的指標,并找到它們的平均值,然后按支持度(每個標簽的真實實例數)加權。 - ‘samples’: 計算每個實例的指標,并找到它們的平均值。 當y_true為二進制時將被忽略。 |
| pos_label | int or str (default=1) 正向類別的標簽。僅適用于二進制y_true。 對于multilabel-indicator y_true,pos_label固定為1。 |
| sample_weight | array-like of shape (n_samples,), default=None 樣本權重。 |
返回值:
| average_precision | float |
F值:當需要在精確率與召回率之間進行權衡時,F1曲線同時考慮了兩者,可以作為一種評價指標,它是精確率和召回率的調和平均數。當β > 1時,召回率的權重高于精確率,當β < 1時精確率的權重高于召回率,當β = 1時,就變成了F1值。
Fβ=(1+β2)?Precision?Recallβ2?Precision+RecallF_\beta=(1+\beta^2)\cdot\frac{Precision \cdot Recall}{\beta^2 \cdot Precision + Recall} Fβ?=(1+β2)?β2?Precision+RecallPrecision?Recall?
F1:
F1=2?Precision?RecallPrecision+RecallF_1=\frac{2\cdot Precision \cdot Recall}{Precision + Recall} F1?=Precision+Recall2?Precision?Recall?
對應sklearn包 :
sklearn.metrics.f1_score(y_true, y_pred, *, labels=None, pos_label=1, average='binary', sample_weight=None, zero_division='warn')
參數:
| y_true | 1d array-like, or label indicator array / sparse matrix 真實目標值。 |
| y_pred | 1d array-like, or label indicator array / sparse matrix 分類器返回的估計目標。 |
| labels | list, optional 當average!='binary’時要包括的一組標簽,如果average是None,則是標簽的順序。可以排除數據中存在的標簽,例如,以忽略多數否定類的方式計算多類平均值,而數據中不存在的標簽將導致宏平均值中的0成分。對于多標簽目標,標簽是列索引。 默認情況下,y_true和y_pred中的所有標簽均按排序順序使用。 在版本0.17中進行了更改:針對多類問題改進了參數標簽。 |
| pos_label | str or int, 1 by default average ='binary’且數據為二進制的要進行報告的類。如果數據是多類或多標簽的,則將被忽略;設置labels=[pos_label]及average!='binary’將僅報告該標簽的得分。 |
| average | string,[None| ‘binary’(default)| ‘micro’| ‘macro’| ‘samples’| ‘weighted’] 對于多類/多標簽目標,此參數是必需的。如果為None,則返回每個類的得分。否則,將確定數據執行的平均類型: - 'binary': 僅報告由pos_label指定的類的結果。僅當目標(y_ {true,pred})為二進制時才適用。 - 'micro': 通過計算真正例、假負例和假正例的總數來全局計算度量。 - 'macro': 計算每個標簽的度量,并找到其未加權平均值。 這沒有考慮標簽不平衡。 - 'weighted': 計算每個標簽的度量,并找到它們受支持的平均權重(每個標簽的真實實例數)。這會更改‘macro’以解決標簽不平衡的問題;這可能導致F-score不在精確度和召回率之間。 - 'samples': 計算每個實例的度量,并找到它們的平均值(僅對不同于accuracy_score的多標簽分類有意義)。 |
| sample_weight | array-like of shape (n_samples,), default=None 樣本權重。 |
| zero_division | “warn”, 0 or 1, default=”warn” 設置除數為零(即所有預測和標簽均為負)時的返回值。如果設置為“warn”,則該值為0,但也會發出警告。 |
返回值:
| f1_score | float or array of float, shape = [n_unique_labels] 二進制分類中的正例類的F1分數,或者對于多類別任務,每個類別的F1分數的加權平均值。 |
G值:是精確率與召回率的另一種評價指標,它是精確率和召回率的幾何平均數。
G=Precision?RecallG=\sqrt{Precision \cdot Recall} G=Precision?Recall?
ROC曲線和AUC :當測試集中的正負樣本的分布變化的時候,ROC曲線能夠保持不變,即ROC曲線能夠很好的消除樣本類別不平衡對評估指標產生的影響(把實際中的正樣例與負樣例分開考慮)。ROC曲線與下方坐標軸圍成的面積就是AUC,考慮的是樣本預測的排序質量,因此與排序誤差有緊密聯系,AUC的值應當越大越好。
對應sklearn包 (AUC):
sklearn.metrics.auc(x, y)
參數:
| x | array, shape = [n] x坐標。這些必須是單調遞增或單調遞減。 |
| y | array, shape = [n] y坐標。 |
返回值:
| auc | float |
對應sklearn包(ROC) :
sklearn.metrics.roc_curve(y_true, y_score, *, pos_label=None, sample_weight=None, drop_intermediate=True)
參數:
| y_true | array, shape = [n_samples] 真正的二進制標簽。 如果標簽既不是{-1,1}也不是{0,1},則應該明確給出pos_label。 |
| y_score | array, shape = [n_samples] 目標分數可以是正例類的概率估計值,置信度值或決策的非閾值度量(如某些分類器上的“ decision_function”所返回)。 |
| pos_label | int or str, default=None 正例類的標簽。當pos_label = None時,如果y_true在{-1,1}或{0,1}中,則pos_label設置為1,否則將引發錯誤。 |
| sample_weight | array-like of shape (n_samples,), default=None 樣本權重。 |
| drop_intermediate | boolean, optional (default=True) 是否降低一些未達到最佳閾值的閾值,這些閾值不會出現在繪制的ROC曲線上。 這對于創建較淺的ROC曲線很有用。 版本0.17中的新功能:參數drop_intermediate。 |
返回值:
| fpr | array, shape = [>2] 增加假正例率,使得元素i是score >= thresholds[i]預測的假正例率。 |
| tpr | array, shape = [>2] 增加真正例率,使得元素i是score >= thresholds[i]的預測的真正例率。 |
| thresholds | array, shape = [n_thresholds] 用于計算fpr和tpr的決策函數的閾值遞減。 thresholds [0]表示沒有實例在預測中,可以任意設置為max(y_score)+ 1。 |
真正率、假正率、真負率、假負率:
真正率:在所有實際為正例的樣本中,正確判斷為正例的概率;
假正率:在所有實際為負例的樣本中,錯誤判斷為負例的概率;
真負率:在所有實際為負例的樣本中,正確判斷為負例的概率;
假負率:在所有實際為正例的樣本中,錯誤判斷為正例的概率。
TPR=TPTP+FNFPR=FPFP+TNTNR=TNTN+FPFNR=FNFN+TPTPR=\frac{TP}{TP+FN} \quad FPR=\frac{FP}{FP+TN} \quad TNR=\frac{TN}{TN+FP} \quad FNR=\frac{FN}{FN+TP} \quad TPR=TP+FNTP?FPR=FP+TNFP?TNR=TN+FPTN?FNR=FN+TPFN?
對應sklearn包 :
sklearn.metrics.confusion_matrix(y_true, y_pred, *, labels=None, sample_weight=None, normalize=None)
參數:
| y_true | array-like of shape (n_samples,) 真實目標值。 |
| y_pred | array-like of shape (n_samples,) 分類器返回的估計目標。 |
| labels | array-like of shape (n_classes), default=None 索引矩陣的標簽列表。可用于重新排序或選擇標簽的子集。如果指定None,則那些在y_true或y_pred中至少出現一次的標簽將按照排序使用。 |
| sample_weight | array-like of shape (n_samples,), default=None 樣本權重。 版本0.18中的新功能。 |
| normalize | {‘true’, ‘pred’, ‘all’}, default=None 對真實(行),預測(列)條件或所有總體的混淆矩陣進行歸一化。 如果為None,則不會對混淆矩陣進行歸一化。 |
返回值:
| C | ndarray of shape (n_classes, n_classes) 混淆矩陣,其第i行和第j列條目指示真實標簽為第i類且預測標簽為第j類的樣本數。 |
3.3. 回歸任務
MSE=1m∑i=1m(f(xi)?yi)2MSE=\frac{1}{m} \sum_{i=1}^{m}{(f(x_i)-y_i)^2} MSE=m1?i=1∑m?(f(xi?)?yi?)2
對應sklearn包 :
sklearn.metrics.mean_squared_error(y_true, y_pred, *, sample_weight=None, multioutput='uniform_average', squared=True)
參數:
| y_true | array-like of shape (n_samples,) or (n_samples, n_outputs) 真實目標值。 |
| y_pred | array-like of shape (n_samples,) or (n_samples, n_outputs) 預測目標值。 |
| sample_weight | array-like of shape (n_samples,), optional 樣本權重。 |
| multioutput | string in [‘raw_values’, ‘uniform_average’] or array-like of shape (n_outputs) 定義多個輸出值的匯總。類似數組的值定義了用于平均誤差的權重。 - ‘raw_values’: 如果是多輸出格式的輸入,則返回完整的錯誤集。 - ‘uniform_average’: 所有輸出的誤差均以相同的權重平均。 |
| squared | boolean value, optional (default = True) 如果為True,則返回MSE值;如果為False,則返回RMSE值。 |
返回值:
| loss | float or ndarray of floats 非負浮點值(最佳值為0.0)或浮點值數組,每個目標對應一個浮點值。 |
均方根誤差(RMSE): 通過計算真實值與預測值的差值的平方和的均值的標準差來衡量距離。
RMSE=1m∑i=1m(f(xi)?yi)2RMSE=\sqrt{ \frac{1}{m} \sum_{i=1}^{m}{(f(x_i)-y_i)^2}} RMSE=m1?i=1∑m?(f(xi?)?yi?)2?
平均絕對誤差(MAE)或L1范數損失: 通過計算預測值和真實值之間的距離的絕對值的均值來衡量距離。
MAE=1m∑i=1m∣yi?f(xi)∣MAE=\frac{1}{m} \sum_{i=1}^{m}|{y_i-f(x_i)|} MAE=m1?i=1∑m?∣yi??f(xi?)∣
對應sklearn包 :
sklearn.metrics.mean_absolute_error(y_true, y_pred, *, sample_weight=None, multioutput='uniform_average')
參數:
| y_true | array-like of shape (n_samples,) or (n_samples, n_outputs) 真實目標值。 |
| y_pred | array-like of shape (n_samples,) or (n_samples, n_outputs) 預測目標值。 |
| sample_weight | array-like of shape (n_samples,), optional 樣本權重。 |
| multioutput | string in [‘raw_values’, ‘uniform_average’] or array-like of shape (n_outputs) 定義多個輸出值的匯總。類似數組的值定義了用于平均誤差的權重。 - ‘raw_values’: 如果是多輸出格式的輸入,則返回完整的錯誤集。 - ‘uniform_average’: 所有輸出的誤差均以相同的權重平均。 |
返回值:
| loss | float or ndarray of floats 如果多輸出為‘raw_values’,則分別為每個輸出返回均值絕對錯誤。如果多輸出是‘uniform_average’或權重的ndarray,則將返回所有輸出錯誤的加權平均值。 MAE輸出為非負浮點。最佳值為0.0。 |
3.4. 無監督任務
輪廓系數:適應于實際類別信息未知的情況。對于單個樣本,設a是與它同類別中其它樣本的 平均距離,b是與它距離最近不同類別中樣本的平均距離,定義為:
S=b?amax(a,b)S=\frac{b-a}{max(a,b)} S=max(a,b)b?a?
對應sklearn包 :
sklearn.metrics.silhouette_score(X, labels, *, metric='euclidean', sample_size=None, random_state=None, **kwds)
參數:
| X | array [n_samples_a, n_samples_a] if metric == “precomputed”, or, [n_samples_a, n_features] otherwise 樣本之間的成對距離數組或特征數組。 |
| labels | array, shape = [n_samples] 每個樣本的預測標簽。 |
| metric | string, or callable 計算特征陣列中實例之間的距離時使用的度量。如果metric是字符串,則它必須是metrics.pairwise.pairwise_distances允許的選項之一。如果X是距離數組本身,則使用metric=“precomputed”。 |
| sample_size | int or None 在數據的隨機子集上計算輪廓系數時要使用的樣本大小。如果sample_size為None,則不使用采樣。 |
| random_state | int, RandomState instance or None, optional (default=None) 確定用于選擇樣本子集的隨機數生成。當sample_size不為None時使用。在多個函數調用之間傳遞int以獲得可重復的結果。請參閱詞匯表。 |
| **kwds | optional keyword parameters 任何其他參數都直接傳遞給距離函數。如果使用scipy.spatial.distance度量,則參數仍取決于度量。有關用法示例,請參見scipy文檔。 |
返回值:
| silhouette | float 所有樣本的平均輪廓系數。 |
4. 機器學習用到的python庫
4.1. Numpy
- Numpy:通常用來進行矢量化的計算
- 常用函數:
| np.array() | 用于創建一維或多維數組 |
| np.arange() | 在給定的間隔內返回具有一定步長的整數 |
| np.linspace() | 創建一個具有指定間隔的浮點數的數組 |
| np.random.randint() | 在一個范圍內生成n個隨機整數樣本 |
| np.zeros() | 創建一個全部為0的數組 |
| np.ones() | 創建一個全部為1的數組 |
| np.full() | 創建一個單獨值的n維數組 |
| np.min() | 返回數組中的最小值 |
| np.max() | 返回數組中的最大值 |
| np.mean() | 返回數組的平均數 |
| np.median() | 返回數組的中位數 |
| np.np.sort() | 對數組排序 |
- 優點:
- numpy的基本對象是ndarray,最大的優勢在于用它進行多維數組的計算,不用寫多重for循環,直接可以進行矢量化的運算
- 封裝了vectorize函數,可以把處理標量的函數矢量化,極大地提高了計算速度
- 缺點:
- ndarray中的數據類型必須相同,于是有了pandas可以處理不同數據類型的數據集
4.2. Pandas
- Pandas: 通常用來處理結構化的數據
- 優點:
- 數據結構Series,理解為一個一維的數組,只是index名稱可以自己改動。類似于定長的有序字典,有index和value
- 數據結構DataFrame,理解為一個二維數組,索引有兩個維度,可更改。一行一樣本,一列一特征。每一行都可以看作一個樣本,每一列都可以看作一個Series
- 封裝的to_datetime函數轉換日期數據類型,支持大多數的日期格式,而且轉換后的datetime類型數據支持日期運算
4.3. Matplotlib
- Matplotlib: 用來繪制出直觀的圖表
Figure:是指整個圖形,也就是一張畫布,包括了所有的元素,如標題,軸線等;
Axes:繪制 2D 圖像的實際區域,也稱為軸域區,或者繪圖區;
Axis:是指圖形的水平軸和垂直軸,包括軸的長度、軸的標簽和軸的刻度等;
xlabel、ylabel: 設置橫軸、縱軸標簽及大小
xticks、yticks: 設置坐標軸刻度的字體大小
plt.legend():添加圖例
plt.scatter():函數用于生成一個scatter散點圖
plt.plot(x, y, format_string, **kwargs) :繪制函數曲線(繪制坐標圖)
總結
以上是生活随笔為你收集整理的机器学习-基础知识、sklearn库、评估指标、python数据处理库的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: jj斗地主服务器维护几点能好使啊,斗地主
- 下一篇: SketchUp Pro 2021 v2