分類模型構建
分類是指構造一個分類模型,輸入樣本的特征值,輸出對應的類別,將每個樣本映射到預先定義好的類別中。分類模型若建立在已有類標記的數據集上,則屬於有監督學習。在實際應用場景中,分類算法被用於行為分析,物品識別,圖像檢測等。
模塊 | 函數 | 算法名稱 |
---|---|---|
linear_model | LogisticRegression | 邏輯斯蒂回歸 |
svm | SVC | 支持向量機 |
neighbors | KNeighborsClassifier | K最近鄰分類 |
naive_bayes | GaussianNB | 高斯朴素貝葉斯 |
tree | DecisionTreeClassifier | 分類決策樹 |
ensemble | RandomForestClassifier | 隨機森林分類 |
ensemble | GradientBoostingClassifier | 梯度提升分類樹 |
from sklearn.datasets import load_breast_cancer # 乳腺癌
from sklearn.model_selection import train_test_split
# 數據導出
data = load_breast_cancer()
X = data['data']
y = data['target']
names = data['feature_names']
# 划分數據集
X_train,X_test,y_train,y_test = train_test_split(X,y,test_size=0.2,random_state=1234)
# 標准化
from sklearn.preprocessing import StandardScaler
Standard = StandardScaler().fit(X_train) # 訓練產生標准化的規則
Xtrain = Standard.transform(X_train) # 將規則應用於訓練集
Xtest = Standard.transform(X_test) # 將規則應用於測試集
# 模型構建
from sklearn.neighbors import KNeighborsClassifier
knn = KNeighborsClassifier().fit(Xtrain,y_train)
y_pred = knn.predict(Xtest)
分類算法評價函數
方法名稱 | 最佳值 | sklearn函數 |
---|---|---|
Precision(精確率) | 1.0 | metrics.precision_score |
Recall(召回率) | 1.0 | metrics.recall_score |
F1值 | 1.0 | metrics.f1_score |
Cohen’s Kappa系數 | 1.0 | metrics.cohen_kappa_score |
ROC曲線 | 最靠近y軸 | metrics. roc_curve |
from sklearn import metrics
precision_score(y_test, y_pred)
0.9066666666666666
recall_score(y_test,y_pred)
0.9855072463768116
f1_score(y_test,y_pred)
0.9444444444444444
cohen_kappa_score(y_test,y_pred)
0.8496538081107814
roc_curve(y_test,y_pred)
(array([0. , 0.15555556, 1. ]),
array([0. , 0.98550725, 1. ]),
array([2, 1, 0]))
當然,我們還可以偶爾開一下掛,一應俱全啊,美滋滋。
from sklearn.metrics import classification_report
print(classification_report(y_test, y_pred))
precision recall f1-score support
0 0.97 0.84 0.90 45
1 0.91 0.99 0.94 69
avg / total 0.93 0.93 0.93 114
最后,再送你們一段畫”ROC曲線“的代碼,可直接copy的呦~~~
from sklearn.metrics import roc_curve
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif'] = 'SimHei' ## 改字體
## 求出ROC曲線的x軸和Y軸
fpr, tpr, thresholds = roc_curve(y_test,y_pred)
plt.figure(figsize=(10,6))
plt.xlim(0,1) ##設定x軸的范圍
plt.ylim(0.0,1.1) ## 設定y軸的范圍
plt.xlabel('假正率')
plt.ylabel('真正率')
plt.plot(fpr,tpr,linewidth=2, linestyle="-",color='red')
plt.show()
下課。