机器学习实战(基于scikit-learn和TensorFlow)学习心得(25)--softmax回归及其计算公式

本文介绍了softmax回归用于多分类问题的基本思想和计算流程。首先,解释了softmax函数如何从得分转化为类别概率,并展示了softmax回归的参数θ求解过程。接着,讨论了交叉熵作为成本函数,以及其对应的梯度下降更新规则。最后,通过对比与逻辑回归的相似性,强调了在多类别情况下softmax的适用性,并以三分类问题为例说明迭代优化过程。
摘要由CSDN通过智能技术生成

softmax regission

好,接下来说一说softmax,上一个随笔介绍了logistic 回归,但是logistic基本上都是用在二分类问题上,也就是他能分辨出一个样本究竟是A还是B,但如果多出一个C选项的话系统就不能很好的工作了.而softmax就是用来处理多分类问题得.

softmax regression的思想是这样的,当给定实例x时,Softmax回归模型首先为每个类别k计算该x的得分s(x),然后通过将Softmax函数应用于得分来估计每个类别的概率。
计算得分s(x)的方程应该看起来很熟悉,

要注意的是其中的θk并不是一组参数,而是一个元组对象,对于每个类别k,都有一个独一无二的θ值去计算分数.

一旦为实例x计算了每个类别的分数,就可以通过softmax函数再次计算这些分数,从而估算出该实例属于类别k的概率。


该函数计算每个分数的指数,然后对其进行归一化(除以所有指数的总和)。
在这个式子中,k是类别k=1,2,3,...n, s(x)k是指实例对于这个类别k的分数,σ(s(x))是实例x属于类别k的估计概率.

那么这个方程中最重要的是什么呢?就是怎么求θ.其实所有的回归问题都可以总结成一个问题,如何求得一组最合适的参数.

还是老样子,构建一个合适的cost function,然后用梯度下降法一点一点的迭代出最优解.

那我们之前就说了,cross entropy是一个在分类回归

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
首先,需要下载MIT-BIH Arrhythmia Database的数据集,可以从这个网站下载:https://physionet.org/content/mitdb/1.0.0/ 数据集包含48个记录,每个记录包含30分钟的心电信号,以及相应的心律失常类型标记。 接下来,我们需要安装一些必要的Python库,包括wfdb、numpy、matplotlib、seaborn和scikit-learn: ```python !pip install wfdb !pip install numpy !pip install matplotlib !pip install seaborn !pip install scikit-learn ``` 然后,我们可以使用wfdb库中的rdrecord函数读取数据: ```python import wfdb record = wfdb.rdrecord('mitdb/100') ``` 数据包含两个字段,一个是信号,一个是注释: ```python signal = record.p_signal annotation = wfdb.rdann('mitdb/100', 'atr') ``` 我们可以使用matplotlib库绘制心电信号的图像: ```python import matplotlib.pyplot as plt plt.plot(signal) plt.show() ``` 接下来,我们需要将数据集中的每个记录转换为图像,以便进行图像识别机器学习。我们可以使用Python的PIL库将信号转换为图像: ```python from PIL import Image from io import BytesIO def signal_to_image(signal): # 将信号归一化到0-255之间 signal = (signal - signal.min()) / (signal.max() - signal.min()) * 255 # 将信号转换为图像 image = Image.fromarray(signal).resize((224, 224)).convert('RGB') # 将图像转换为字节流 buffer = BytesIO() image.save(buffer, format='jpeg') buffer.seek(0) return buffer.read() ``` 现在,我们可以将所有记录转换为图像,并将它们保存到一个文件夹中: ```python import os for i in range(100, 148): record = wfdb.rdrecord(f'mitdb/{i}') signal = record.p_signal[:, 0] image_bytes = signal_to_image(signal) with open(f'images/{i}.jpg', 'wb') as f: f.write(image_bytes) ``` 接下来,我们需要使用图像识别机器学习模型对心电异常信号进行分析。这里我们使用经典的卷积神经网络模型VGG16: ```python from keras.applications.vgg16 import VGG16 from keras.preprocessing.image import ImageDataGenerator from keras.models import Sequential from keras.layers import Flatten, Dense # 下载预训练的VGG16模型 vgg16 = VGG16(weights='imagenet', include_top=False, input_shape=(224, 224, 3)) # 冻结VGG16模型的权重 for layer in vgg16.layers: layer.trainable = False # 构建模型 model = Sequential() model.add(vgg16) model.add(Flatten()) model.add(Dense(units=512, activation='relu')) model.add(Dense(units=5, activation='softmax')) # 编译模型 model.compile(optimizer='adam', loss='categorical_crossentropy', metrics=['accuracy']) # 数据增强器 datagen = ImageDataGenerator(rescale=1./255, validation_split=0.2) # 训练数据生成器 train_generator = datagen.flow_from_directory( directory='images', subset='training', target_size=(224, 224), batch_size=32, class_mode='categorical') # 验证数据生成器 valid_generator = datagen.flow_from_directory( directory='images', subset='validation', target_size=(224, 224), batch_size=32, class_mode='categorical') # 训练模型 model.fit(train_generator, epochs=10, validation_data=valid_generator) ``` 训练完模型后,我们可以使用它对新的心电信号进行分类: ```python import numpy as np from keras.preprocessing.image import load_img, img_to_array def predict_heartbeat_type(image_path): # 加载图像 image = load_img(image_path, target_size=(224, 224)) # 将图像转换为数组 image_array = img_to_array(image) # 归一化图像 image_array = image_array / 255. # 将图像数组转换为批次数组 image_array = np.expand_dims(image_array, axis=0) # 使用模型进行预测 prediction = model.predict(image_array)[0] # 返回预测结果 return ['N', 'L', 'R', 'A', 'V'][np.argmax(prediction)] ``` 最后,我们可以使用predict_heartbeat_type函数对新的心电信号进行分类: ```python print(predict_heartbeat_type('test_image.jpg')) ``` 以上就是基于MIT-BIH已标注心电信号类型的数据进行图像识别机器学习并对心电异常信号做分析的Python代码。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值