SVM(支持向量机)--跌倒检测

本文介绍了如何利用SVM进行跌倒检测,包括数据采集、特征提取和SVM分类。通过对三轴重力加速度传感器数据的分析,提取关键特征,并通过SVM实现高达98%准确率的分类。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前几天在清理电脑时,发现以前在项目中使用SVM进行跌倒检测判别的资料,Mark一下:

对SVM的认识,想必学习机器学习的人都知道,主要作为一个二分类器使用,并且经常与逻辑斯特回归进行比较,其思想就是对正负样本划分超平面,离超平面最近的正负样本(支持向量)的间隔最大, 以达到分类的目的,下面对其做一些简要的介绍:

SVM的性质:

1.  监督学习,判别模型,凸二次规划;
2.  损失函数自带L2正则,在梯度下降时不需要另外添加正则函数;
3.  非线性分类时,需要使用核函数,将二维不可分情况下的样本映射到高维空间已达到可分类的目的,常用的核函数:线性核,高斯核,sigmod等;使用那种核函数,需要根据经验以及测试来验证。
4.  引入松弛变量以及惩罚因子,以达到软间隔分类,其实就是解决噪声不可分的问题;
5.  训练出的模型仅与支持向量有关,改变其他样本点(非支持向量)不影响模型的分类效果。

上面对SVM做了一些简单的总结,里面涉及到很多概念,以及原理,在这里就不一一说明了。下面就项目的基本思路以及Python实现做一些简单的介绍

1. 数据采集

通过智能手表进行跌倒检测,数据(X,Y,Z)来自与三轴重力加速度传感器,每次采集6秒的数据作为一个样本,其中包含了1200个数据,也就是1200个(X,Y,Z),当然在采集样本时,需要大量的各种动作支持,下蹲,上跳,走路,跑步,弯腰等等,最闹心的是跌倒,还要不同的姿势,画面自行脑补。

2. 特征提取

这一步也是关键的一步,至于特征提取的原理就不说了,在我觉得主要是对数据进行了压缩,我们使用不同的方法对采集到的1200个数据压缩到59个特征值,其中包含均值,中值,偏差,偏度,峰度,最大值,最小值等等。这样一来,大大压缩了数据,更加有利于计算。

3. SVM分类

上面对SVM的性质,以及主要思想已经做出介绍,在这里就不说明了,在项目中也就是调用接口。通过实际测试,其检测的准确率达到98%。

Python代码

#!/usr/bin/env python
# coding: utf-8

# In[4]:

import sys
from statistics import median
from statistics import stdev
from scipy.stats import kurtosis,skew
import math
import numpy as np
import os
import tensorflow as tf
from tensorflow import keras
import numpy as np
import pandas as pd
import csv
from sklearn import svm
from random import randint
from sklearn.model_selection import train_test_split
from sklearn.metrics import roc_auc_score
from sklearn.metrics import roc_curve
from sklearn.metrics import precision_recall_curve
from sklearn.metrics import f1_score
from sklearn.metrics import auc
from sklearn import datasets
from joblib import dump, load

# In[42]:
####特征值计算
def feature(FOLDER, label):
    FALL_SIZE = 1200
    df_list = []
    sum_df = pd.DataFrame()
    #sum_df = df_.fillna(0) # with 0s rather than NaNs
    PATH = '/home/nsh/share/ML/MobiAct_Dataset_v2.0/Annotated Data/'
    OUTPUT_PATH = '/home/nsh/share/ML/MobiAct_Dataset_v2.0/train_data_trainsform_lstm/'
    #FOLDER = 'CSI'
    FILE_PATH = PATH + FOLDER
    OUTPUT_FILE_PATH = OUTPUT_PATH + FOLDER + '.csv'
    count = 0
    final = []
    for file in os.listdir(FILE_PATH):
        #print(file)
       
评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

机器灵

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值