图像分类数据集有CIFAR-10、ImageNet
应用:情感分类
关键:将样本x从文本形式转为向量形式 词袋模型(Bag-of-Words,BoW)
模型性能的评估指标
混淆矩阵(confusion matrix)
对于二分类问题,根据每一个样本的真实标签 和预测标签 ෝ的差异,可以 得到一个2*2的矩阵
对于多分类(N)问题,可以得到一个N*N的矩阵
二分类评价指标
三分类评价指标
micro策略
指把所有的类放在一起算,即所 有类的TP加和,再除以所有类的 TP和FP的加和。因此, micro方 法下的precision和recall都等 于accuracy。
macro策略
先分别求出每个类的precision再算术平均
Weighted策略
weighted算法不再是取算术平均, 而是 乘以该类在总样本数中的占比作为权重
逻辑斯蒂回归(logistic regression)是机器学习中的经典分类方法,属于对数 线性模型的一种。
对于线性判别函数f(实数空间),选择怎样的决策函数g,能让决策空间缩 小到[0,1]上,同时保证损失函数的连续性?
以二分类问题为例:
以下第一个函数也叫sigmoid函数
梯度下降过程中,需要在每个点上计算损失函数的梯度,然后继续朝负梯度值的 方向移动。因此,计算损失函数相对于参数向量每个分量的梯度,然后更新参数。 参数(权值向量)更新公式为:
算法关键步骤:
(1)随机初始化权重参数和偏置项
(2)计算初步加权平均输出X_out
(3)对X_out进行Sigmoid转换
(4)计算真实值和预测值的误差err
(5)计算权重参数的梯度
(6)计算偏置项的梯度
(7)分别更新权重参数和偏置项的参数
(8)记录损失,以便后续观察是否收敛
(9)重复1-8,直至收敛
import pandas as pd
import numpy as np
import os
os.chdir(r"d:\classdata\机器学习\02\to_student\data")
df = pd.read_csv("iris.csv")
df.head()
X = df.iloc[:100,0:4].values#读取样本点数据
y = df.iloc[:100,4].values#读取样本点真实值
y = np.where(y == 'setosa',0,1)#对真实值二值化
w_ = np.zeros(1+X.shape[1])#构造线性函数,除了权重参数需要加上偏置项,这样才构成权值向量,shape[1]表示X的1维长度
total_loss = []#构造损失列表,表示收敛趋势
iter = 1000
for i in range(iter):
X_out = X.dot(w_[1:].T)#使用权值向量输出预测值
y_val = 1/(1 + np.exp(-X_out))#对预测值进行sigmoid化
err = y - y_val#真实值和预测值的误差err
grad = -(1/len(X))*X.T.dot(err)#计算权重参数的梯度
eta = 0.25#设置步长
w_[1:] -= eta*grad
w_[0] -= -(1/len(X))*eta*err.sum()#计算偏置项梯度,然后乘以步长,更新偏置项
loss = (1/len(X))*(-y.dot(np.log(y_val))-(1-y).dot(np.log(1-y_val)))#记录损失
total_loss.append(loss)
print('no.{} is completed,loss is {}'.format(i+1, loss))
print(w_)
多分类问题
类别标签 ∈ {1,2, … , }可以有个取值
logistic回归在多分类问题上的扩展,判别函数的数量是C个 预测输入属于每个类别的取值 通过softmax函数将输出值转换为条件概率
Softmax回归#exp表示自然指数函数
多分类问题的交叉熵损失函数