分类模型构建
分类是指构造一个分类模型,输入样本的特征值,输出对应的类别,将每个样本映射到预先定义好的类别中。分类模型若建立在已有类标记的数据集上,则属于有监督学习。在实际应用场景中,分类算法被用于行为分析,物品识别,图像检测等。
模块 | 函数 | 算法名称 |
---|---|---|
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()
下课。