二、sklearn构建分类项目
2.1 收集数据集并选择合适的特征
使用IRIS鸢尾花数据集
from sklearn import datasets
import pandas as pd
iris = datasets.load_iris()
X = iris.data
y = iris.target
feature = iris.feature_names
data = pd.DataFrame(X, columns=feature)
data['target'] = y
data.head(2)
sepal length (cm) | sepal width (cm) | petal length (cm) | petal width (cm) | target | |
---|---|---|---|---|---|
0 | 5.1 | 3.5 | 1.4 | 0.2 | 0 |
1 | 4.9 | 3.0 | 1.4 | 0.2 | 0 |
特征解释:
- sepal length:花萼长度
- sepal width:花萼款年度
- sepal length:花瓣长度
- sepal width:花瓣宽度
2.2 选择度量模型性能的指标
- 分类问题本身的因变量是离散变量
- 在分类任务种,对于每个类别犯错的代价不尽相同
评价指标
- 真阳性TP(True Positive):预测值和真实值都为正
- 真阴性TN(True Negative):预测值与真实值都是负
- 假阳性FP(False Positive):预测值为正,实际值为负
- 假阴性FN(False Negative): 预测值为负,实际值为负
模型指标:
- 准确率:分类正确的样本数占总样本的比例
A C C = T P + T N T P + T N + F P + F N ACC = \frac{TP+TN}{TP+TN+FP+FN} ACC=TP+TN+FP+FNTP+TN - 精度:预测为正且分类正确的样本占预测为正的比例
P R E = T P T P + F P PRE = \frac{TP}{TP+FP} PRE=TP+FPTP - 召回率:预测为正且分类正确的样本占类别为正的比例
R E C = T P T P + F N REC = \frac{TP}{TP+FN} REC=TP+FNTP - F1值:综合衡量精度和召回率
F 1 = 2 P R E × R E C P R E + R E C F1 = 2\frac{PRE \times REC}{PRE + REC} F1=2PRE+RECPRE×REC - ROC曲线:以假阳率为横轴,真阳率为纵轴画出来的曲线,曲线下方面积越大越好
真阳率: T P R = T P T P + F P TPR = \frac{TP}{TP+FP} TPR=TP+FPTP
假阳率: F P R = F P T P + F P FPR = \frac{FP}{TP+FP} FPR=TP+FPFP
2.3 选择具体的模型并训练
2.3.1 逻辑回归Logistic Regression
逻辑回归的因变量一般是二分类
常规步骤:
- 寻找h函数(hypothesis)
- 构造J函数(损失函数)
- 寻找使J函数最小时的 θ \theta θ
(1) 构造预测函数h
利用sigmoid函数:
g ( z ) = 1 1 + e − z g(z) = \frac{1}{1+e^{-z}} g(z)=1+e−z1
对于线性边界,边界为:
θ 0 + θ 1 x 1 + . . . + θ n x n = ∑ i = 1 n θ i x i = θ T x \theta_0+\theta_1x_1+...+\theta_nx_n = \sum_{i=1}^{n}\theta_ix_i = \theta^Tx θ0+θ1x1+...+θnxn=i=1∑nθixi=θTx
构造预测函数为:
h θ ( x ) = g ( θ T x ) = 1 1 + e − θ T x h_\theta(x) = g(\theta^Tx) = \frac{1}{1+e^{-\theta^{T}x}} hθ(x)=g(θTx)=1+e−