深度學習代碼索引

本篇博客總結了,可能會重複使用的代碼的索引,方便查找

分類性能度量

P-R曲線繪製

#利用鳶尾花數據集繪製P-R曲線
print(__doc__)      #打印註釋

import matplotlib.pyplot as plt
import numpy as np
from sklearn import svm, datasets
from sklearn.metrics import precision_recall_curve    # 精確率和召回率
from sklearn.metrics import average_precision_score   
from sklearn.preprocessing import label_binarize      # 標籤的標準化處理
from sklearn.multiclass import OneVsRestClassifier    #一對其餘(每次將一個類作爲正類,剩下的類作爲負類)

# from sklearn.cross_validation import train_test_split  #適用於anaconda 3.6及以前版本
from sklearn.model_selection import train_test_split     #適用於anaconda 3.7,訓練集和數據集拆分模塊

#以iris數據爲例,畫出P-R曲線
iris = datasets.load_iris()
X = iris.data    #150*4
y = iris.target  #150*1

# 標籤二值化,將三個類轉爲001, 010, 100的格式.因爲這是個多類分類問題,後面將要採用
#OneVsRestClassifier策略轉爲二類分類問題
y = label_binarize(y, classes=[0, 1, 2])    #將150*1轉化成150*3
n_classes = y.shape[1]                      #列的個數,等於3
print (y)

# 增加了800維的噪聲特徵
random_state = np.random.RandomState(0)
n_samples, n_features = X.shape

X = np.c_[X, random_state.randn(n_samples, 200 * n_features)]   #行不變,只增加了列,150*804

# 訓練集和測試集拆分,比例爲0.5
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=.5, random_state=random_state) #隨機數,填0或不填,每次都會不一樣

# 一對其餘,轉換成兩類,構建新的分類器
classifier = OneVsRestClassifier(svm.SVC(kernel='linear', probability=True, random_state=random_state))
#訓練集送給fit函數進行擬合訓練,訓練完後將測試集的樣本特徵注入,得到測試集中每個樣本預測的分數
y_score = classifier.fit(X_train, y_train).decision_function(X_test)

# Compute Precision-Recall and plot curve
#下面的下劃線是返回的閾值。作爲一個名稱:此時“_”作爲臨時性的名稱使用。
#表示分配了一個特定的名稱,但是並不會在後面再次用到該名稱。
precision = dict()
recall = dict()
average_precision = dict()
for i in range(n_classes):
    #對於每一類,計算精確率和召回率的序列(:表示所有行,i表示第i列)
    precision[i], recall[i], _ = precision_recall_curve(y_test[:, i],  y_score[:, i])
    average_precision[i] = average_precision_score(y_test[:, i], y_score[:, i])#切片,第i個類的分類結果性能

# Compute micro-average curve and area. ravel()將多維數組降爲一維
precision["micro"], recall["micro"], _ = precision_recall_curve(y_test.ravel(),  y_score.ravel())
average_precision["micro"] = average_precision_score(y_test, y_score, average="micro") #This score corresponds to the area under the precision-recall curve.

# Plot Precision-Recall curve for each class
plt.clf()#clf 函數用於清除當前圖像窗口
plt.plot(recall["micro"], precision["micro"],
         label='micro-average Precision-recall curve (area = {0:0.2f})'.format(average_precision["micro"]))
for i in range(n_classes):
    plt.plot(recall[i], precision[i],
             label='Precision-recall curve of class {0} (area = {1:0.2f})'.format(i, average_precision[i]))

plt.xlim([0.0, 1.0])
plt.ylim([0.0, 1.05]) #xlim、ylim:分別設置X、Y軸的顯示範圍。
plt.xlabel('Recall', fontsize=16)
plt.ylabel('Precision',fontsize=16)
plt.title('Extension of Precision-Recall curve to multi-class',fontsize=16)
plt.legend(loc="lower right")#legend 是用於設置圖例的函數
plt.show()

特徵處理

量綱縮放(標準化縮放法和區間縮放法)

# -*- coding: utf-8 -*-
"""
演示內容:量綱的特徵縮放
(兩種方法:標準化縮放法和區間縮放法。每種方法舉了兩個例子:簡單二維矩陣和iris數據集)
"""
#方法1:標準化縮放法 例1:對簡單示例二維矩陣的列數據進行
from sklearn import preprocessing   
import numpy as np  
#採用numpy的array表示,因爲要用到其mean等函數,而list沒有這些函數
X = np.array([[0, 0], 
        [0, 0], 
        [100, 1], 
        [1, 1]])  
# calculate mean  
X_mean = X.mean(axis=0)  
# calculate variance   
X_std = X.std(axis=0)  
#print (X_std)
# standardize X  
X1 = (X-X_mean)/X_std
print (X1)
print ("")
 
# we can also use function preprocessing.scale to standardize X  
X_scale = preprocessing.scale(X)  
print (X_scale)
 
 
#方法1: 標準化縮放法 例2:對iris數據二維矩陣的列數據進行。這次採用一個集成的方法StandardScaler
from sklearn import datasets
iris = datasets.load_iris()
X_scale = preprocessing.scale(iris.data)  
print (X_scale)
 
#方法2: 區間縮放法 例3:對簡單示例二維矩陣的列數據進行
from sklearn.preprocessing import MinMaxScaler
 
data = [[0, 0], 
        [0, 0], 
        [100, 1], 
        [1, 1]]
 
scaler = MinMaxScaler()
print(scaler.fit(data))
print(scaler.transform(data))
 
#方法2: 區間縮放法 例4:對iris數據二維矩陣的列數據進行
from sklearn.preprocessing import MinMaxScaler
 
data = iris.data
 
scaler = MinMaxScaler()
print(scaler.fit(data))
print(scaler.transform(data))

深度學習

自然語言處理

持續更新...........

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章