| ÈËÀàÐÐΪʶ±ðµÄÄ¿µÄÊÇͨ¹ýһϵÁеĹ۲죬¶ÔÈËÀàµÄ¶¯×÷ÀàÐÍ¡¢ÐÐΪģʽ½øÐзÖÎöºÍʶ±ð£¬²¢Ê¹ÓÃ×ÔÈ»ÓïÑԵȷ½Ê½¶ÔÆä½øÐÐÃèÊöµÄ¼ÆËã»ú¼¼Êõ¡£ÓÉÓÚÈËÀàÐÐΪµÄ¸´ÔÓÐԺͶàÑùÐÔ£¬ÍùÍùʶ±ð³öµÄ½á¹ûÊǶàÑùÐԵ쬲¢ÇÒÁ¬´ø×ÅÐÐΪÀàÐ͵ĸÅÂÊÊä³öµÄ¡£Ëæ×ÅÐÅÏ¢¼¼ÊõµÄ·¢Õ¹£¬¸÷ÖÖÒÆ¶¯É豸ºÍ¿É´©´÷É豸ÕýÔÚÒÔ¼ÓËٶȵķ½Ê½Ôö³¤£¬ÆäÐÔÄܺÍǶÈëµÄ´«¸ÐÆ÷Ò²±äµÄ¶àÑù»¯£¬ÀýÈ磺¸ßÇåÏà»ú¡¢¹â´«¸ÐÆ÷¡¢ÍÓÂÝÒÇ´«¸ÐÆ÷¡¢¼ÓËÙ¶È´«¸ÐÆ÷¡¢GPSÒÔ¼°Î¶ȴ«¸ÐÆ÷µÈ¡£¸÷ÖÖ¸÷ÑùµÄ´«¸ÐÆ÷¶¼ÔÚʱ¿ÌµÄ¼Ç¼×ÅʹÓÃÕßµÄÐÅÏ¢£¬ÕâЩ¼Ç¼ÐÅÏ¢²»½ö¿ÉÒÔÓÃÓÚÓû§Î»ÖõÄÔ¤²â£¬Ò²¿ÉÒÔ½øÐÐÓû§ÐÐΪµÄʶ±ðµÈ¡£
±¾ÎÄʹÓÃÁËÖÇÄÜÉ豸¼ÓËÙ¶È´«¸ÐÆ÷µÄÊý¾Ý£¬½áºÏÖ§³ÖÏòÁ¿»úµÄÌØÐÔ½øÐÐÈËÀàÐÐΪʶ±ðÄ£Ð͵ÄÉè¼ÆºÍÓ¦Óá£

ÈçÉÏͼËùʾ£¬ÐźÅÊý¾ÝµÄ²É¼¯À´×ÔÓÚǶÈëÔÚÖÇÄÜÊÖ»úÖеļÓËÙ¶È´«¸ÐÆ÷£¬ÊµÑéÑ¡ÓÃÁËÈËÀàÈÕ³£ÐÐΪÖеÄÁùÀà³£¼ûÐÐΪ£¬·Ö±ðΪ£º×ß·¡¢ÂýÅÜ¡¢ÉÏÂ¥ÌÝ¡¢ÏÂÂ¥ÌÝ¡¢×ø¡¢Õ¾Á¢£¬Êý¾ÝÊÕ¼¯ºó£¬¶ÔÊý¾Ý½øÐÐÌØÕ÷³éÈ¡£¬³éÈ¡ºóµÄÌØÕ÷ʹÓÃÖ§³ÖÏòÁ¿»úµÄ·ÖÀ๦ÄܶÔÌØÕ÷½øÐзÖÀ࣬×îºóʶ±ð³öÈËÀàµÄÁùÀàÐÐΪ¡£
¹ØÓÚÖ§³ÖÏòÁ¿»ú£¨SVM£©
Ö§³ÖÏòÁ¿»ú(Support Vector Machine)ÊÇCortesºÍVapnikÓÚ1995ÄêÊ×ÏÈÌá³öµÄ£¬ËüÔÚ½â¾öСÑù±¾¡¢·ÇÏßÐÔ¼°¸ßάģʽʶ±ðÖбíÏÖ³öÐí¶àÌØÓеÄÓÅÊÆ£¬²¢Äܹ»ÍƹãÓ¦Óõ½º¯ÊýÄâºÏµÈÆäËû»úÆ÷ѧϰÎÊÌâÖС£SVMËã·¨ÊÇ»ùÓÚ¼ä¸ô×î´ó»¯µÄÒ»ÖּලѧϰËã·¨£¬°üº¬ÏßÐԺͷÇÏßÐÔÁ½ÖÖÄ£ÐÍ£¬¶ÔÓÚÏßÐÔ²»¿É·ÖÎÊÌ⣬ͨ³£»á¼ÓÈëºËº¯Êý½øÐд¦Àí¡£
Ö§³ÖÏòÁ¿»ú±¾ÖÊÉÏÊÇÒ»¸ö¶þÀà·ÖÀà·½·¨£¬ËüµÄ»ù±¾Ä£ÐÍÊǶ¨ÒåÔÚÌØÕ÷¿Õ¼äÉϵļä¸ô×î´ó»¯µÄÏßÐÔ·ÖÀàÆ÷£¬¼ä¸ô×î´ó»¯Ê¹ËüÓбðÓÚ¸ÐÖª»ú¡£¶ÔÓÚÏßÐÔ¿É·ÖµÄѵÁ·¼¯£¬¸ÐÖª»úµÄ·ÖÀë³¬Æ½ÃæÊDz»Î¨Ò»µÄ£¬»áÓÐÎÞÇî¸ö£¬¶øÖ§³ÖÏòÁ¿»ú»á¶Ô·ÖÀë³¬Æ½ÃæÔö¼ÓÔ¼ÊøÌõ¼þ£¬Ê¹µÃ·ÖÀà³¬Æ½ÃæÎ¨Ò»¡£
¼ÙÉèÎÒÃÇÓÐÒ»×é·ÖÊôÓÚÁ½ÀàµÄ¶þάµã£¬·Ö±ðÓÃÐǺÍÔ²±íʾ£¬ÕâЩµã¿ÉÒÔͨ¹ýÖ±Ï߷ָÎÒÃÇÐèÒªÕÒµ½Ò»Ìõ×îÓŵķָîÏß:
1.ÕÒµ½ÕýÈ·µÄ³¬Æ½Ã棨³¡¾°1£©£ºÕâÀÎÒÃÇÓÐÈý¸ö³¬Æ½Ãæ(A¡¢B¡¢C)£¬ÎÒÃÇÐèÒªÕÒµ½ÕýÈ·µÄ³¬Æ½ÃæÀ´·Ö¸îÐǺÍÔ²£º

ÎÒÃǵÄÄ¿µÄÊÇÑ¡Ôñ¸üºÃµØ·Ö¸îÁ½¸öÀàµÄ³¬Æ½Ã棬Òò´ËÉÏͼÖпÉÒÔ¿´µ½³¬Æ½Ãæ B ÒѾÄܹ»Íê³É·Ö¸îµÄ¹¤×÷¡£
2.ÕÒµ½ÕýÈ·µÄ³¬Æ½Ã棨³¡¾°2£©£ºÍ¬ÑùÓÐÈý¸ö³¬Æ½Ãæ(A¡¢B¡¢C)£¬ÎÒÃÇÐèÒªÕÒµ½ÕýÈ·µÄ³¬Æ½ÃæÀ´·Ö¸îÐǺÍÔ²£º

ÉÏͼÖУ¬Õë¶ÔÈÎÒâÒ»¸öÀ࣬×î´ó»¯×î½üµÄÊý¾ÝµãºÍ³¬Æ½ÃæÖ®¼äµÄ¾àÀ뽫ÓÐÖúÓÚÎÒÃÇÑ¡ÔñÕýÈ·µÄ³¬Æ½Ã棬Õâ¸ö¾àÀë³ÆÎª±ß¾à£¬ÈçÏÂͼ£º
¿ÉÒÔ¿´µ½£¬³¬Æ½ÃæC¾àÀëÁ½¸öÀà±ðµÄ±ßÔµ±ÈAºÍB¶¼Òª¸ß£¬Òò´ËÎÒÃǽ«³¬Æ½ÃæC¶¨Îª×îÓŵij¬Æ½Ã档ѡÔñ±ß¾à×î¸ßµÄ³¬Æ½ÃæµÄÁíÒ»¸öÖØÒªµÄÔÒòÊdz°ôÐÔ£¬¼ÙÉèÎÒÃÇÑ¡Ôñ×îµÍ±ß¾àµÄ³¬Æ½Ã棬ÄÇô·ÖÀà½á¹ûµÄ´íÎóÂʽ«»á¼«´óµÄÉý¸ß¡£
3.ÕÒµ½ÕýÈ·µÄ³¬Æ½Ã棨³¡¾°3£©£ºÍ¬ÑùÓÐÈý¸ö³¬Æ½Ãæ(A¡¢B¡¢C)£¬ÎÒÃÇʹÓó¡¾°2µÄ¹æÔòѰÕÒÕýÈ·µÄ³¬Æ½ÃæÀ´·Ö¸îÐǺÍÔ²£º

¿ÉÄÜ¿´µ½ÉÏͼ£¬µÚÒ»Ó¡Ïó×îÓŵij¬Æ½ÃæÊÇB£¬ÒòΪËü±È³¬Æ½ÃæAÓиü¸ßµÄ±ß¾à¡£µ«ÊÇ£¬ÕâÀïÊÇÒ»ÖÖÒâÍâÇé¿ö£¬Ö§³ÖÏòÁ¿»ú»áÑ¡ÔñÔÚ½«±ß¾à×î´ó»¯Ö®Ç°¶ÔÀà½øÐо«È··ÖÀàµÄ³¬Æ½Ãæ¡£ÕâÀ³¬Æ½ÃæB¾ßÓзÖÀàÎó²î£¬³¬Æ½ÃæAÒѾÕýÈ·µÄ·ÖÀ࣬Òò´Ë´ËÇé¿öÏ£¬×îÓų¬Æ½ÃæÔòÊÇA¡£
4.Äܹ»·ÖÀàÁ½¸öÀà±ð£¨³¡¾°4£©£ºÕë¶ÔÀûȺµãÇé¿ö£¬Ñ°ÕÒ×îÓų¬Æ½Ã棺

ÉÏͼÖУ¬Ò»¸öÐdzöÏÖÔÚÁËÔ²ËùÔÚµÄÇøÓòÄÚ£¬´ËÐǿɳÆÎªÀûȺµã¡£µ«ÊÇÖ§³ÖÏòÁ¿»ú¾ßÓкöÂÔÒì³£µã²¢ÕÒµ½¾ßÓÐ×î´ó±ß¾àµÄ³¬Æ½ÃæµÄÌØÕ÷£¬Òò´Ë£¬¿ÉÒÔ˵£¬Ö§³ÖÏòÁ¿»úÊdz°ôÐԵġ£×îÖÕ×îÓų¬Æ½ÃæÈçÏÂͼËùʾ£º
5.ÕÒµ½³¬Æ½Ãæ²¢·ÖÀࣨ³¡¾°5£©£ºÒÔÉϵij¡¾°¾ùÊÇÏßÐÔ³¬Æ½Ãæ¡£ÔÚÏÂÃæµÄ³¡¾°ÖУ¬ÎÒÃÇÎÞ·¨Ö±½ÓÔÚÁ½¸öÀàÖ®¼äÕÒµ½ÏßÐÔ³¬Æ½Ã棬ÄÇô֧³ÖÏòÁ¿»úÈçºÎ·ÖÀàÕâÁ½¸öÀàÄØ£¿

Ö§³ÖÏòÁ¿»ú¿ÉÒÔÇáËɵĽâ¾ö£¬ËüÒýÈëÁËһЩ¸½¼ÓµÄÌØÐÔÀ´½â¾ö´ËÀàÎÊÌâ¡£ÕâÀÎÒÃÇÌí¼ÓÒ»¸öеÄÌØÕ÷¡£ÖØÐ»æÖÆ×ø±êÖáÉϵÄÊý¾ÝµãÈçÏ£º
ÔÚÖ§³ÖÏòÁ¿»úÖУ¬ÒѾºÜÈÝÒ×ÔÚÕâÁ½¸öÀàÖ±½ÓÕÒµ½ÏßÐÔ³¬Æ½ÃæÁË£¬µ«ÊÇ£¬³öÏÖµÄÁíÒ»¸öÖØÒªµÄÎÊÌâÊÇ£¬ÎÒÃÇÊÇ·ñÒªÊÖ¶¯´¦ÀíÕâÑùµÄÎÊÌâÄØ£¿µ±È»²»ÐèÒª£¬ÔÚÖ§³ÖÏòÁ¿»úÖУ¬ÓÐÒ»¸öºËº¯ÊýµÄ¼¼Êõ£¬Ëü»á½«µÍά¿Õ¼äµÄÊäÈëת»»Îª¸ßά¿Õ¼ä£¬ÐγÉÓ³Éä¡£Óɴ˻ὫijЩ²»¿É·ÖµÄÎÊÌâת»»Îª¿É·ÖÎÊÌ⣬Ö÷ÒªÓÃÓÚһЩ·ÇÏßÐÔ·ÖÀàÎÊÌâÖС£
µ±ÎÒÃDz鿴³¡¾°5Öеij¬Æ½ÃæÊÇ£¬¿ÉÄÜ»áÈçÏÂͼËùʾ£º
ÒÔÉϽö½öÊǹØÓÚÖ§³ÖÏòÁ¿»úµÄÒ»µã½éÉÜ£¬Ö§³ÖÏòÁ¿»úÓÐÕ⸴ÔÓµÄËã·¨ÒÔ¼°Í걸µÄÖ¤Ã÷£¬ÕâÀï²»ÔÙÀÛÊö£¬¿É²Î¿¼Support_vector_machine²é¿´Ñ§Ï°¡£
¶ÔÓÚÖ§³ÖÏòÁ¿»úÀ´Ëµ£¬±È½ÏÓÐÃûµÄÀà¿âµ±Êǫ̂Íå´óѧÁÖÖÇÈÊ(LinChih-Jen)½ÌÊÚËù¹¹½¨µÄLIBSVMÀà¿â£¬ÓÉÓÚLIBSVM³ÌÐòС£¬ÔËÓÃÁé»î£¬ÊäÈë²ÎÊýÉÙ£¬²¢ÇÒÊÇ¿ªÔ´µÄ£¬Ò×ÓÚÀ©Õ¹£¬Òò´Ë³ÉΪĿǰӦÓÃ×î¶àµÄÖ§³ÖÏòÁ¿»úµÄ¿â¡£
ÁíÍ⻹ÌṩÁ˶àÖÖÓïÑԵĽӿڣ¬±ãÓÚÔÚ²»Í¬µÄƽ̨ÏÂʹÓ㬱¾ÎÄÖÐʹÓõÄÒ²ÊÇÕâ¸öÀà¿â¡£ ¹ØÓÚMacÏ´ËÀà¿âµÄ±àÒë°²×°£¬Çë²Î¿¼ÎĵµInstall
libsvm on Mac OSX£¬±¾ÎÄ»áÔÚMacϽøÐÐѵÁ·Êý¾ÝÔ¤´¦Àí¡¢Ä£ÐÍѵÁ·¡¢²ÎÊýµ÷Óŵȣ¬×îÖյõ½Ä£ÐÍ»áʹÓÃÔÚiOSÏîÄ¿ÖУ¬µ±È»¸ÃÄ£ÐÍÒ²¿ÉÒÔʹÓÃÔÚAndroidÒÔ¼°ÆäËûÈκοÉÒÔʹÓõĵط½¡£
Õë¶ÔÖ§³ÖÏòÁ¿»úÒÔ¼°LIBSVMÏêϸµÄ½éÉÜ£¬¿É²é¿´¹Ù·½¸ø³öµÄÎĵµ£ºPDF
´«¸ÐÆ÷Êý¾Ý¼¯
±¾ÎÄʹÓÃÁË WISDM (Wireless Sensor Data Mining) Lab ʵÑéÊÒ¹«¿ªµÄ
Actitracker µÄÊý¾Ý¼¯¡£ WISDM ¹«¿ªÁËÁ½¸öÊý¾Ý¼¯£¬Ò»¸öÊÇÔÚʵÑéÊÒ»·¾³²É¼¯µÄ£»ÁíÒ»¸öÊÇÔÚÕæÊµÊ¹Óó¡¾°Öвɼ¯µÄ£¬ÕâÀïʹÓõÄÊÇʵÑéÊÒ»·¾³²É¼¯µÄÊý¾Ý¡£
1.²âÊԼǼ£º1,098,207 Ìõ
2.²âÊÔÈËÊý£º36 ÈË
3.²ÉÑùƵÂÊ£º20 Hz
4.ÐÐΪÀàÐÍ£º6 ÖÖ
×ß·
ÂýÅÜ
ÉÏÂ¥ÌÝ
ÏÂÂ¥ÌÝ
×ø
Õ¾Á¢
5.´«¸ÐÆ÷ÀàÐÍ£º¼ÓËÙ¶È
6.²âÊÔ³¡¾°£ºÊÖ»ú·ÅÔÚÒ¶µÀïÃæ
Êý¾Ý·ÖÎö
´ÓʵÑéÊҲɼ¯Êý¾ÝÏÂÔØµØÖ·ÏÂÔØÊý¾Ý¼¯Ñ¹Ëõ°ü£¬½âѹºó¿ÉÒÔ¿´µ½ÏÂÃæÕâЩÎļþ£º
readme.txt WISDM_ar_v1.1_raw_about.txt WISDM_ar_v1.1_trans_about.txt WISDM_ar_v1.1_raw.txt WISDM_ar_v1.1_transformed.arff |
ÎÒÃÇÐèÒªµÄÊǰüº¬ RAW Êý¾ÝµÄWISDM_ar_v1.1_raw.txt Îļþ£¬ÆäËûµÄÊÇת»»ºóµÄ»òÕß˵Ã÷Îļþ¡£ÏÈ¿´¿´ÕâЩÊý¾ÝµÄ·Ö²¼Çé¿ö£º
import matplotlib.pyplot as plt import numpy as np import pandas as pd from sklearn.metrics import precision
_score, recall_score, f1_score, confusion
_matrix, roc_curve, auc
if __name__ == "__main__":
column_names = ['user-id', 'activity',
'timestamp', 'x-axis', 'y-axis', 'z-axis']
df = pd.read_csv("WISDM_ar_v1.1_raw.txt
", header=None, names=column_names)
n = 10
print df.head(n)
subject = pd.DataFrame(df["user-id"]
.value_counts(), columns=["Count"])
subject.index.names = ['Subject']
print subject.head(n)
activities = pd.DataFrame(df["activity"]
.value_counts(), columns=["Count"])
activities.index.names = ['Activity']
print activities.head(n)
activity_of_subjects = pd.DataFrame(df
.groupby("user-id")["activity"].
value_counts())
print activity_of_subjects.unstack()
.head(n)
activity_of_subjects.unstack().
plot(kind='bar', stacked=True,
colormap='Blues', title="Distribution")
plt.show() |
WISDM_ar_v1.1_raw.txt Îļþ²»ÊǺϷ¨µÄ CSV
Îļþ£¬Ã¿ÐкóÃæÓиö ; ºÅ£¬Èç¹ûʹÓà Pandas µÄ read_csv·½·¨Ö±½Ó¼ÓÔØ»á³ö´í£¬ÐèÒªÏȽ«ÕâЩ·ÖºÅÈ«²¿É¾³ý¡£

²é¿´Êý¾Ý¼¯¸÷¸öÐÐΪµÄÕ¼±ÈÇé¿ö£¬»æÖƱýͼÈçÏ£º

¿ÉÒÔ¿´µ½´ËÊý¾Ý¼¯ÊÇÒ»¸ö²»Æ½ºâµÄÊý¾Ý¼¯£¬µ«ÊÇÕâÀïÔÝʱºöÂÔÆä²»Æ½ºâÐÔ¡£
Êý¾ÝÔ¤´¦Àí
ÔÚLIBSVMµÄ¹Ù·½ÎĵµÖпÉÒÔ¿´µ½£¬LIBSVMËùʹÓõÄÊý¾Ý¼¯ÊÇÓÐÑϸñµÄ¸ñʽ¹æ·¶£º
<label> <index1>:<value1>
<index2>:<value2> ... |
<label>£º¶ÔÓÚ·ÖÀàÎÊÌâ´ú±íÑù±¾µÄÀà±ð£¬Ê¹ÓÃÕûÊý±íʾ£¬Ö§³Ö¶à¸öÀà±ð£»¶ÔÓڻعéÎÊÌâ´ú±íÄ¿±ê±äÁ¿£¬¿ÉÒÔÊÇÈÎÒâʵÊý¡£
<index1>:<value1>£º±íÊ¾ÌØÕ÷Ïî¡£ÆäÖÐ <index>
´ú±íÌØÕ÷ÏîµÄ±àºÅ£¬Ê¹ÓÃ´Ó 1 ¿ªÊ¼µÄÕûÊý±íʾ£¬¿ÉÒÔ²»Á¬Ðø£»<value> ´ú±í¸ÃÌØÕ÷Ïî¶ÔÓ¦µÄÌØÕ÷Öµ£¬Ê¹ÓÃʵÊý±íʾ¡£ÔÚʵ¼ÊµÄ²Ù×÷ÖУ¬Èç¹ûÑù±¾È±ÉÙij¸öÌØÕ÷Ï¿ÉÒÔÖ±½ÓÊ¡ÂÔ£¬LIBSVM
»á×Ô¶¯°Ñ¸ÃÏîµÄÌØÕ÷Öµ¸³Îª 0¡£
±êÇ©ºÍÿÏîÌØÕ÷Ö®¼äʹÓÿոñ·Ö¸î£¬Ã¿ÐÐÊý¾ÝʹÓÃ\n·Ö¸î¡£
Ö»ÓзûºÏÕâÑù¸ñʽµÄÊý¾Ý£¬²ÅÄܹ»±»LIBSVMʹÓ㬷ñÔò»áÖ±½Ó±¨´í¡£Õâ¶Ô×¼±¸ºÃµÄÊý¾Ý£¬´ËÀà¿â»¹ÌṩÁËÒ»¸ötools/checkdata.pyºË²é¹¤¾ß£¬ÒÔ±ãºË²éÊý¾Ý¼¯ÊÇ·ñ·ûºÏÒªÇó¡£Õë¶ÔÌØÕ÷µÄÌáÈ¡£¬ÎªÁ˼òµ¥£¬ÕâÀï½öÌáÈ¡ÎåÀàÌØÕ÷£º
1.ƽ¾ùÖµ
2.×î´óÖµ
3.×îСֵ
4.·½²î
×éºÏÈýÖáµÄ¼ÓËÙ¶ÈÖµ math.sqrt(math.pow(acc_x, 2)+math.pow(acc_y,
2)+math.pow(acc_z, 2))
Á˽âÁËËùÐèÒªµÄÊý¾Ý¸ñʽºó£¬¿ªÊ¼½øÐÐÊý¾ÝµÄÔ¤´¦Àí£¬²¢×ª»»ÎªËùÐèÒªµÄ¸ñʽÎļþ¡£½ÓÏÂÀ´·Ö±ð½«ÑµÁ·ºÍ²âÊÔÊý¾Ý¼¯½øÐÐÌØÕ÷³éÈ¡²¢°´ÕÕLIBSVMµÄÊý¾Ý¸ñÊ½ÖØ×飬´úÂëÈçÏ£º
import ast import math import numpy as np
FEATURE = ("mean", "max",
"min",
"std")
STATUS = ("Sitting", "Walking",
"Upstairs", "Downstairs",
"Jogging", "Standing")
def preprocess(file_dir,
Seg_granularity):
gravity_data = []
with open(file_dir) as f:
index = 0
for line in f:
clear_line = line.strip().lstrip
().rstrip(';')
raw_list = clear_line.split(',')
index = index + 1
if len(raw_list) < 5:
continue
status = raw_list[1]
acc_x = float(raw_list[3])
acc_y = float(raw_list[4])
print index
acc_z = float(raw_list[5])
if acc_x == 0 or acc_y == 0
or acc_z == 0:
continue
gravity = math.sqrt(math.pow
(acc_x, 2)+math.pow(acc_y, 2)
+math.pow(acc_z, 2))
gravity_tuple = {"gravity":
gravity, "status": status}
gravity_data.append(gravity_tuple)
# split data sample of gravity
splited_data = []
cur_cluster = []
counter = 0
last_status = gravity_data[0]
["status"]
for gravity_tuple in gravity_data:
if not (counter < Seg_granularity
and gravity_tuple["status"] ==
last_status):
seg_data = {"status": last_status,
"values": cur_cluster}
# print seg_data
splited_data.append(seg_data)
cur_cluster = []
counter = 0
cur_cluster.append(gravity_tuple
["gravity"])
last_status = gravity_tuple["status"]
counter += 1
# compute statistics of gravity data
statistics_data = []
for seg_data in splited_data:
np_values = np.array(seg_data.pop
("values"))
seg_data["max"] = np.amax(np_values)
seg_data["min"] = np.amin(np_values)
seg_data["std"] = np.std(np_values)
seg_data["mean"] = np.mean(np_values)
statistics_data.append(seg_data)
# write statistics result into a
file in format of LibSVM
with open("WISDM_ar_v1.1_raw_svm.
txt", "a") as the_file:
for seg_data in statistics_data:
row = str(STATUS.index(seg_data
["status"])) + " " + \
str(FEATURE.index("mean")) + ":"
+
str(seg_data["mean"]) + " "
+ \
str(FEATURE.index("max")) + ":"
+
str(seg_data["max"]) + " "
+ \
str(FEATURE.index("min")) + ":"
+
str(seg_data["min"]) + " "
+ \
str(FEATURE.index("std")) + ":"
+
str(seg_data["std"]) + "\n"
# print row
the_file.write(row)
if __name__ == "__main__":
preprocess("WISDM_ar_v1.1_raw.txt",
100)
pass |
³É¹¦×ª»»ºóµÄÊý¾Ý¸ñʽÐÎÈ磺
. . . 5 0:9.73098373254 1:10.2899465499 2:9
.30995703535 3:0.129482033438 5 0:9.74517171235 1:10.449291842 2:9.
15706284788 3:0.161143714697 5 0:9.71565678822 1:10.4324206204 2:9.
41070666847 3:0.136704694206 5 0:9.70622803003 1:9.7882020821 2:9.
60614907234 3:0.0322246639852 5 0:9.74443440742 1:10.2915256401 2:9
.28356073929 3:0.165543789197 0 0:9.28177794859 1:9.47500395778 2:8
.92218583084 3:0.0700079500015 0 0:9.27218416165 1:9.40427562335 2:9.
14709243421 3:0.0433805537826 0 0:9.27867211792 1:9.39755287296 2:9
.1369415014 3:0.037533026091 0 0:9.27434585368 1:9.33462907672 2:9
.21453200114 3:0.0263815511773 . . . |
ÓÉÓÚ¸ÃÊý¾Ý¼¯²¢Î´Çø·ÖѵÁ·ºÍ²âÊÔÊý¾Ý¼¯£¬Òò´ËΪÁË×îÖÕµÄÄ£ÐÍÑéÖ¤£¬Ê×ÏÈÐèÒª·Ö¸î¸ÃÊý¾Ý¼¯ÎªÁ½·Ý£¬·Ö±ð½øÐÐѵÁ·ºÍÄ£ÐÍÑéÖ¤£¬·Ö¸î·½·¨¾ÍʹÓÃ×î¼òµ¥µÄ2\8ÔÔò£¬Ê¹ÓÃLIBSVMÌṩµÄ¹¤¾ßtools/subset.py½øÐÐÊý¾Ý·Ö¸î£º
¹¤¾ßʹÓýéÉÜ£º
Usage: subset.py [options] dataset
subset_size [output1] [output2]
This script randomly selects
a subset of the dataset.
options:
-s method : method of selection (default 0)
0 -- stratified selection
(classification only)
1 -- random selection
output1 : the subset (optional)
output2 : rest of the data (optional)
If output1 is omitted, the subset
will be printed on the screen. |
ʹÓù¤¾ß½øÐÐÊý¾Ý·Ö¸î£º
python subset.py -s 0 WISDM_ar_v1.1_raw
_svm.txt 2190 raw_test.txt raw_train.txt |
!! ×¢Òâ !!
ÉÏÃæ´úÂë¶ÎÖеÄ2190¾ÍÊÇsubset.py¹¤¾ß×ÓÊý¾Ý¼¯µÄ´óС£¬¸Ã´óС²¢²»ÊÇÎļþµÄ´óС£¬¶øÊǸù¾ÝÔʼÎļþÖеÄÐÐÊý½øÐÐ2\8·ÖºóµÄÐÐÊý¡£subset.py»áËæ»ú³éÈ¡ËùÉèÖÃÐÐÊýµÄÊý¾Ýµ½Ö¸¶¨µÄÎļþÖС£
svm-train -b 1 raw_train.txt
raw_trained.model |
Íê³Éºó£¬ÎÒÃǾ͵õ½ÁËѵÁ·Êý¾Ý¼¯raw_train.txtºÍ²âÊÔÊý¾Ý¼¯raw_test.txt¡£
µ½´Ë£¬ËùÐèҪʹÓõÄÊý¾Ý¼¯ÒѾÍêȫת»»ÎªLIBSVMËùÐèÒªµÄ¸ñʽ£¬Èç¹û²»·ÅÐÄÊý¾Ý¸ñʽ£¬¿ÉÒÔʹÓÃtools/checkdata.py¹¤¾ß½øÐмì²é¡£
Ä£ÐÍ´´½¨ÓëѵÁ·
ÔÚ¹ØÓÚÖ§³ÖÏòÁ¿»ú²¿·Ö£¬Èç¹ûÒѾÔÚMacÉϰ²×°ºÃÁËlibsvm£¬ÄÇôÔÚÄãµÄÃüÁîÐй¤¾ßÖÐÊäÈësvm-train£¬¼´¿É¿´µ½´ËÃüÁîµÄʹÓ÷½Ê½ºÍ²ÎÊý˵Ã÷£¬¼ÙÉèÎÒÃÇʹÓÃĬÈϵIJÎÊý½øÐÐÄ£ÐÍѵÁ·£º
svm-train -b 1 raw_train.txt
raw_trained.model |
ÆäÖÐ-b µÄº¬ÒåÊÇprobability_estimates£¬ÊÇ·ñѵÁ·Ò»¸öSVC»òÕßSVRÄ£ÐÍÓÃÓÚ¸ÅÂÊͳ¼Æ£¬ÉèÖÃΪ1£¬ÒÔ±ã×îÖÕµÄÄ£ÐÍÆÀ¹ÀʹÓá£
ѵÁ·¹ý³ÌµÄ¿ÉÄÜ»áÏûºÄÒ»µãʱ¼ä£¬Ö÷ÒªÔÚÓÚËùʹÓõÄѵÁ·Êý¾Ý¼¯µÄ´óС£¬ÑµÁ·Ê±µÄÈÕÖ¾Êä³öÐÎÈ磺
. . . optimization finished, #iter = 403 nu = 0.718897 obj = -478.778647, rho = -0.238736 nSV = 508, nBSV = 493 Total nSV = 508 * optimization finished, #iter = 454 nu = 0.734417 obj = -491.057723, rho = -0.318206 nSV = 518, nBSV = 507 Total nSV = 518 * optimization finished, #iter = 469 nu = 0.722888 obj = -604.608449, rho = -0.360926 nSV = 636, nBSV = 622 Total nSV = 4136 . . . |
ÆäÖУº#iter Êǵü´ú´ÎÊý£¬nu ÊÇÑ¡ÔñµÄºËº¯ÊýÀàÐ͵IJÎÊý£¬obj Ϊ SVM Îļþת»»ÎªµÄ¶þ´Î¹æ»®Çó½âµÃµ½µÄ×îСֵ£¬rho
ΪÅоöº¯ÊýµÄÆ«ÖÃÏî b£¬nSV ÊDZê×¼Ö§³ÖÏòÁ¿¸öÊý£¨0 < a[i] < c£©£¬nBSV
ÊDZ߽çÉϵÄÖ§³ÖÏòÁ¿¸öÊý£¨a[i] = c£©£¬Total nSV ÊÇÖ§³ÖÏòÁ¿×ܸöÊý¡£
ÕâÑùÎÒÃǾ͵õ½ÁËÄ£ÐÍÎļþraw_trained.model£¬Ê×ÏÈʹÓÃÄãËùÊìϤµÄÎı¾±àÒ빤¾ß´ò¿ª´ËÎļþ£¬ÈÃÎÒÃDz鿴һÏ´ËÎļþÖеÄÄÚÈÝ£º
svm_type c_svc //ËùÑ¡ÔñµÄ svm
ÀàÐÍ£¬Ä¬ÈÏΪ c_svc kernel_type rbf //ѵÁ·²ÉÓõĺË
º¯ÊýÀàÐÍ£¬´Ë´¦Îª RBF ºË gamma 0.333333 //RBF ºËµÄ
gamma ϵÊý nr_class 6 //Àà±ðÊý£¬
´Ë´¦ÎªÁùÔª·ÖÀàÎÊÌâ total_sv 4136 //Ö§³Ö
ÏòÁ¿×ܸöÊý rho -0.369589 -0.28443 -0.352834
-0.852275 -0.831555 0.267266 0.158289
-0.777357 -0.725441 -0.271317 -0.856933 -0.798849 -0.807448
-0.746674 -0.360926
//Åоöº¯ÊýµÄÆ«ÖÃÏî b label 4 1 2 3 0 5 //Àà±ð±êʶ probA -3.11379 -3.0647 -3.2177 -5.
78365 -5.55416 -2.30133 -2.26373
-6.05582 -5.99505 -1.07317 -4.50318 -4.51436 -4.48257 -4.71033 -1.18804 probB 0.099704 -0.00543388 -0.240146
-0.43331 -1.01639 0.230949 0.342831
-0.249265 -0.817104 -0.0249471 -0.209852 -0.691243 -0.0803133
-0.940074 0.272984 nr_sv 558 1224 880 825 325 324
//ÿ¸öÀàµÄÖ§³ÖÏòÁ¿»úµÄ¸öÊý SV //ÒÔÏÂΪ¸÷¸öÀàµÄȨϵÊý
¼°ÏàÓ¦µÄÖ§³ÖÏòÁ¿ 1 0 0 0 0 0:14.384883 1:24.
418964 2:2.5636304 3:5.7143112 1 1 1 0 0 0:11.867873 1:23.
548919 2:4.5479318 3:4.5074937 1 0 0 0 0 0:14.647238 1:24.
192184 2:4.0759445 3:5.367968 1 0 0 0 0 0:14.374831 1:24
.286867 2:2.0045062 3:5.5710882 1 0 0 0 0 0:14.099495 1:24
.03442 2:2.42664 3:5.7580063 1 0 0 0 0 0:14.313538 1:25.
393975 2:1.9496137 3:5.6174387 ... |
µÃµ½Ä£ÐÍÎļþÖ®ºó£¬Ê×ÏÈÒª½øÐеľÍÊÇÄ£Ð͵IJâÊÔÑéÖ¤£¬»¹¼ÇµÃ¿ªÊ¼½øÐÐÊý¾Ý×¼±¸µÄʱºò£¬ÎÒÃÇ·Ö¸îÁËѵÁ·ºÍ²âÊÔÊý¾Ý¼¯Âð£¿ÑµÁ·Êý¾Ý¼¯½øÐÐÁËÄ£Ð͵ÄѵÁ·£¬½ÓÏÂÀ´¾ÍÊDzâÊÔÊý¾Ý¼¯·¢»Ó×÷ÓõÄʱºòÁË¡£
Ñé֤ģÐÍ£¬LIBSVMÌṩÁËÁíÒ»¸öÃüÁî·½·¨svm-predict£¬Ê¹ÓýéÉÜÈç
Usage: svm-predict [options]
test_file model_file output_file options: -b probability_estimates: whether
to predict probability estimates,
0 or 1 (default 0); for one-class SVM only 0 is supported -q : quiet mode (no outputs) |
주
ʹÓòâÊÔÊý¾Ý¼¯½øÐÐÄ£ÐÍÑéÖ¤£º
svm-predict -b 1 raw_test.txt
raw_trained.model predict.out |
Ö´ÐдËÃüÁîºó£¬LIBSVM»á½øÐÐʶ±ðÔ¤²â£¬ÓÉÓÚÎÒÃÇʹÓÃÁË-b 1²ÎÊý£¬Òò´Ë×îÖÕ»áÊä³ö¸÷¸öÀà±ðµÄʶ±ð¸ÅÂʵ½predict.outÎļþÖУ¬²¢ÇÒ»áÊä³öÒ»¸ö×ÜÌåµÄÕýÈ·ÂÊ£º
Accuracy = 78.4932% (1719/2190)
(classification) |
¿ÉÒÔ¿´µ½´ËʱÎÒÃÇѵÁ·µÄÄ£Ð͵Äʶ±ðÕýÈ·ÂÊΪ78.4932%¡£
predict.out ÎļþÄÚÈÝÐÎÈ磺
labels 4 1 2 3 0 5 4 0.996517 0.000246958 0.00128824
0.00123075 0.000414204 0.000303014 4 0.993033 0.000643327 0.00456298
0.00103339 0.000427387 0.000299934 1 0.0117052 0.773946 0.128394
0.0848292 0.00065714 0.0004682 1 0.0135437 0.484226 0.343907
0.156548 0.00105013 0.0007251 1 0.0117977 0.885448 0.0256842
0.0761578 0.000513167 0.000399136 3 0.00581106 0.380545 0.120613
0.490377 0.00179286 0.000861917 1 0.0117571 0.91544 0.0145561
0.0573158 0.000524352 0.000406782 1 0.0122297 0.811546 0.0824789
0.0924932 0.000704449 0.000547972 |
ÆäÖУ¬µÚÒ»ÐÐΪ±íÍ·£¬µÚÒ»ÁÐÊÇʶ±ð³öµÄÀà±ð±êÇ©£¬ºóÃæÒÀ´Î¸úן÷¸ö±êÇ©µÄʶ±ð¸ÅÂÊ¡£
ÄÇôÎÊÌâÀ´ÁË£¬ÄѵÀÄ£Ð͵Äʶ±ðÕýÈ·ÂʾÍÖ»Äܵ½Õâ¸ö³Ì¶ÈÁËÂð£¿ÎÒÃÇÔٴλعËsvm-trainÃüÁÆäÖÐÓкܶàµÄ²ÎÊýÎÒÃǶ¼Ê¹ÓÃÁËĬÈϵÄÉèÖ㬲¢Ã»ÓнøÐÐÌØ¶¨µÄÉèÖá£Í¨¹ý²é¿´LIBSVM¹Ù·½µÄÎĵµ£¬·¢ÏÖ¾¹È»ÌṩÁ˲ÎÊýѰÓŵŤ¾ßtools/grid.py£¬Í¨¹ý´Ë¹¤¾ß¿ÉÒÔ×Ô¶¯Ñ°ÕÒѵÁ·Êý¾Ý¼¯ÖеÄ×îÓŲÎÊýCϵÊýºÍgammaϵÊý£¬ÒÔÔÚѵÁ·µÄʱºòʹÓ᣾ßÌåÓ÷¨ÈçÏ£º
Usage: grid.py [grid_options]
[svm_options] dataset
grid_options :
-log2c {begin,end,step | "null"}
: set the range of c (default -5,15,2)
begin,end,step -- c_range = 2^{begin
,...,begin+k*step,...,end}
"null" -- do not grid with c
-log2g {begin,end,step | "null"} :
set the range of g (default 3,-15,-2)
begin,end,step -- g_range = 2^{begin,
...,begin+k*step,...,end}
"null" -- do not grid with g
-v n : n-fold cross validation (default 5)
-svmtrain pathname : set svm
executable path and name
-gnuplot {pathname | "null"} :
pathname -- set gnuplot executable
path and name
"null" -- do not plot
-out {pathname | "null"} :
(default dataset.out)
pathname -- set output file path
and name
"null" -- do not output file
-png pathname : set graphic output
file path and name (default
dataset.png)
-resume [pathname] : resume the grid
task using an existing output
file (default pathname is dataset.out)
This is experimental. Try this
option only if some parameters
have been checked for the SAME data.
svm_options : additional options
for svm-train |
ÓÖÊÇÒ»¶ÑµÄ²ÎÊý£¬µ«ÊDz»±Øµ£ÐÄ£¬¶ÔÓÚ³õѧÕßÀ´Ëµ£¬ÕâÀïµÄ´ó²¿·Ö²ÎÊý¶¼¿ÉÒÔ²»ÓÃÉèÖã¬Ö±½ÓʹÓÃĬÈÏÖµ¼´¿É£¬Èç¹ûÄãÐèÒª²é¿´²ÎÊýѰÓŵĹý³Ì£¬»¹ÐèÒª°²×°gnuplot²¢°´ÕÕ¹Ù·½ËµÃ÷ÅäÖá£
python /tools/grid.py -b 1 raw_train.txt |
Ö´ÐдËÃüÁîºó£¬»á²»¶ÏµÄÊä³ö²»Í¬µÄCϵÊýºÍgammaϵÊýȡֵÇé¿öϵķÖÀà׼ȷÂÊ£¬²¢ÔÚ×îºóÒ»ÐÐÊä³ö×îÓŵIJÎÊýÑ¡Ôñ£º
... [local] 13 -15 73.1217 (best c=8192
.0, g=0.03125, rate=79.3446) [local] 13 3 72.8477 (best c=8192
.0, g=0.03125, rate=79.3446) [local] 13 -9 77.8488 (best c=8192
.0, g=0.03125, rate=79.3446) [local] 13 -3 78.3741 (best c=8192
.0, g=0.03125, rate=79.3446) 8192.0 0.03125 79.3446 |
²¢ÇÒ»áÔÚµ±Ç°Ä¿Â¼ÏÂÉú³ÉÊä³öÎļþraw_train.txt.outºÍ¶ÔÓ¦µÄͼÐÎÎļþraw_train.txt.png£º
¾¹ý×îÓŲÎÊýµÄѰÕÒ£¬×îÖÕ¸ø³öÁËCϵÊýΪ8192.0£¬gammaϵÊýΪ0.03125µÄÇé¿öÏ£¬Ä£ÐÍ·ÖÀàµÄ׼ȷÂÊ×î¸ß£¬Îª79.3446¡£
½ÓÏÂÀ´ÎÒÃÇÔÙ´ÎʹÓÃsvm-train·½·¨£¬²¢ÉèÖõ±Ç°×îÓÅCϵÊýÖµºÍgammaϵÊýÖµ£¬ÖØÐÂѵÁ·ÎÒÃǵÄÄ£ÐÍ£º
svm-train -b 1 -c -g raw_train.
txt raw_bestP_trained.model |
ѵÁ·Íê³Éºó£¬µÃµ½ÐµÄÄ£ÐÍÎļþraw_bestP_trained.model£¬ÔÙ´ÎʹÓòâÊÔÊý¾Ý¼¯½øÐÐÑéÖ¤£º
svm-predict -b 1 raw_test.txt
raw_bestP_trained.model bestP_predict.out |
×îÖÕÊä³ö½á¹ûÈçÏ£º
Accuracy = 79.1324% (1733/2190)
(classification) |
¿ÉÒÔ¿´µ½Ä£Ð͵ÄÔ¤²âÕýÈ·ÂÊÃ÷ÏÔÌáÉýÁ˲»ÉÙ¡£ÉÏÃæµÄ²ÎÊýѰÓŽö½öÊÇʹÓÃÁËĬÈϵIJÎÊý½øÐÐѰÕÒ£¬ÄãÒ²¿ÉÒÔ¼ÌÐø³¢ÊÔÉèÖø÷¸ö²ÎÊý½øÐвÎÊýѰÓÅ£¬ÒÔ½øÒ»²½ÌáÉýÄ£ÐÍʶ±ðÕýÈ·ÂÊ£¬ÕâÀï²»ÔÚ½øÐнøÒ»²½µÄ²ÎÊýѰÓÅ¡£
С½á
¿ÉÒÔ¿´µ½SVM½øÐÐÓû§ÐÐΪʶ±ð£¬¿ÉÒԵõ½½ÏºÃµÄЧ¹û£¬±¾ÎÄÖÐʹÓõÄÊý¾ÝÊÇʵÑéÊÒÊý¾Ý£¬²¢ÇÒÌØÕ÷Ò²½ö½öÌáÈ¡ÁË»ù±¾µÄ¼¸¸ö£¬×¼È·Âʼ´¿É´ïµ½79%ÒÔÉÏ£¬´Ë·½°¸¿ÉÒÔ¼ÌÐø½øÐÐÓÅ»¯£¬Ê¹ÓÃÕæÊµÊÀ½ç²É¼¯µÄÊý¾Ý£¬½øÐиü¼ÓÏêϸµÄÌØÕ÷×¼±¸£¬Ìá¸ßѵÁ·Ê±µÄµü´ú´ÎÊýµÈ£¬½øÐÐÄ£ÐÍÖØÐÂѵÁ·ÓÅ»¯£¬×îÖÕ´ïµ½¸üºÃµÄ·ÖÀàЧ¹û¡£
ÏÂÃæ£¬ÎÒÃǽ«ÔÚiOSƽ̨Ϲ¹½¨Ó¦Ó㬲¢Ê¹ÓÃLIBSVMºÍ±¾ÎÄÖÐѵÁ·ËùµÃµ½µÄÄ£ÐÍ£¬½øÐÐ׼ʵʱÈËÀàÐÐΪʶ±ð¡£
Ç°Ãæ£¬ÎÒÃǼòµ¥½éÉÜÁËÖ§³ÖÏòÁ¿»úÒÔ¼°ÈçºÎʹÓÃLIBSVMÀà¿âºÍ¼ÓËÙ¶È´«¸ÐÆ÷Êý¾Ý½øÐÐÌØÕ÷µÄ³éÈ¡¡¢Ä£Ð͵ÄѵÁ·¡¢²ÎÊýµÄµ÷ÓźÍÄ£Ð͵IJâÊԵȣ¬ÔÚ±¾ÎÄÖУ¬½«Ê¹ÓÃÉÏÆª×îÖյõ½µÄÄ£ÐÍÎļþ£¬ÒÔ¼°LIBSVMÀà¿â£¬ÔÚiOSƽ̨Ϲ¹½¨Ò»¸öÄܹ»Ê¶±ðµ±Ç°¿Í»§¶ËÓû§µÄÐÐΪÀàÐ͵ÄÓ¦Óá£
Ëæ×ÅÒÆ¶¯ÖÕ¶ËÉ豸µÄÐÔÄÜÔ½À´Ô½¸ß£¬Æä¼¯³ÉµÄ´«¸ÐÆ÷É豸ҲԽÀ´Ô½¶à£¬Õì²â¾«¶ÈÔ½À´Ô½¸ßµÄÇé¿ö£¬Ó¦ÓÃÓÚÒÆ¶¯ÖÕ¶ËÉ豸ÉϵĻúÆ÷ѧϰӦÓÃÒ²¶àÁËÆðÀ´¡£ÔÚiOSƽ̨Ï£¬Æ»¹û¹Ù·½µÄºÜ¶àÓ¦ÓÃÖÐÒ²³ÊÏÖ³öÁË»úÆ÷ѧϰµÄÓ°×Ó¡£ÀýÈçiOS
10 ϵͳÖеÄÏà²á£¬Äܹ»½øÐÐÈËÁ³Ê¶±ð²¢½øÐÐÕÕÆ¬µÄ×Ô¶¯·ÖÀà¡¢ÓʼþÖеÄ×Ô¶¯À¬»øÓʼþ¹éÀà¡¢SiriÖÇÄÜÖúÀí¡¢½¡¿µÓ¦ÓÃÖеÄÓû§Ô˶¯ÀàÐÍ·ÖÀàµÈ¡£
Óû§µÄÔ˶¯ÀàÐÍ
ÔÚiOSϵͳµÄ½¡¿µÓ¦ÓÃÖУ¬¿ÉÒÔ¿´µ½ÄãµÄÔËÐÐÀàÐÍ£¬ÆäÖаüº¬ÁËÐÐ×ß¡¢Åܲ½¡¢ÅÀÂ¥ÌÝ¡¢²½Êý¡¢Æï×ÔÐгµµÈÀàÐÍ¡£
ÔÚiOS SDKÖÐÒ²ÌṩÁËÒ»¸öרÓÃÓÚÔ˶¯ÀàÐÍ»ñÈ¡µÄÀàCMMotionActivityManager£¬ÆäÖаüº¬ÁË
stationary walking running automotive cycling unknown |
¼¸ÖÖÐÐΪÀàÐÍ£¬µ«ÊÇÔÚʹÓõĹý³ÌÖУ¬¿ÉÄÜ»áÓöµ½µ±Ç°ÐÐΪºÍ´ËÀà¸ø³öµÄ½á¹û²»Ïàͬ»òÕßͬһʱ¿ÌÓж«ÖÐÀàÐ͵ÄÇé¿ö£¬ÕâÀïÒýÓÃÆ»¹û¸ø³öµÄÒ»¶Î½áÂÛ£º
An estimate of the user's activity
based on the motion of the device.
The activity is exposed as a set
of properties, the properties are not
mutually exclusive.
For example, if you're in a car
stopped at a stop sign the state might
look like:
stationary = YES, walking = NO,
running = NO, automotive = YES
Or a moving vehicle,
stationary = NO, walking = NO,
running = NO, automotive = YES
Or the device could be in motion
but not walking or in a vehicle.
stationary = NO, walking = NO,
running = NO, automotive = NO.
Note in this case all of the
properties are NO. |
Òò´ËÓû§ÐÐΪµÄʶ±ð²¢²»ÊÇÑϸñÒâÒåÉϵÄ׼ȷµÄ£¬ÔÚ»úÆ÷ѧϰÁìÓò£¬Ô¤²â¶¼»áÓÐÒ»¸ö¸ÅÂʵÄÊä³ö£¬ÒýÉê³öµÄ¾ÍÊÇÕýÈ·ÂÊ£¬ÕýÈ·ÂÊÒ²ÊÇÆÀ¹ÀÒ»¸ö»úÆ÷ѧϰģÐ͵ıê×¼Ö®Ò»¡£
¹ØÓÚ¼ÓËÙ¶È´«¸ÐÆ÷
Æ»¹ûµÄÒÆ¶¯É豸ÖУ¬¼¯³ÉÁ˶àÖÖ´«¸ÐÆ÷£¬±¾ÎÄËùÑÝʾµÄ½ö½öʹÓüÓËÙ¶È´«¸ÐÆ÷£¬ÄãÒ²¿ÉÒÔÔö¼Ó´«¸ÐÆ÷ÀàÐÍ£¬Ìá¸ßÊý¾ÝµÄά¶ÈµÈ¡£
¼ÓËÙ¶È´«¸ÐÆ÷Êý¾Ý CMAccelerometerData µÄÀàÐÍΪCMAcceleration£¬ÌṩÁËÈýÖá¼ÓËÙ¶ÈÖµ£¬ÈçÏ£º
typedef struct { double x; double y; double z; } CMAcceleration; // A structure containing
3-axis acceleration data. |
´Ë¼ÓËÙ¶ÈÖµÊǵ±Ç°É豸×ܵļÓËÙ¶ÈÖµ£¬ÏëÒª»ñÈ¡¼ÓËÙ¶È·ÖÁ¿µÄʱºò£¬¿ÉÒÔʹÓÃCMDeviceMotion½øÐлñÈ¡¡£
¹¹½¨iOSÏîÄ¿£¬ÊÕ¼¯´«¸ÐÆ÷Êý¾Ý
ÔÚÉÏÆªÖУ¬ÎÒÃÇÒѾ֪µÀ£¬LIBSVM¾ßÓжàÖÖÓïÑԵĽӿڣ¬ÕâÀïÎÒÃÇÖ±½ÓʹÓÃÆäCÓïÑÔ½Ó¿Ú£¬ÔÚiOSÏîÄ¿Öй¹½¨SVM·ÖÀàÆ÷¡£
1. ´«¸ÐÆ÷Êý¾ÝÊÕ¼¯
Ê×ÏÈÐèÒªÊÕ¼¯¼ÓËÙ¶È´«¸ÐÆ÷Êý¾Ý£¬²¢½øÐÐÊý¾ÝÌØÕ÷³éÈ¡ºÍÊý¾Ý×¼±¸£¬ÒÔ±ãSVMË㷨ʶ±ðʹÓá£ÔÚiOSµÄCoreMotion¿ò¼ÜÖУ¬ÒѾÌṩÁË»ñÈ¡¼ÓËÙ¶È´«¸ÐÆ÷µÄAPI£¬¿ª·¢Õß¿ÉÒÔÖ±½Óµ÷ÓýӿڻñÈ¡¼ÓËÙ¶È´«¸ÐÆ÷Êý¾Ý£º
CMMotionManager *motionManager
= [[CMMotionManager alloc] init]; if ([motionManager isAccele
rometerAvailable]) { [motionManager setAccele
rometerUpdateInterval:0.02];
startTime = [[NSDate date]
timeIntervalSince1970];
[motionManager startAccelerometer
UpdatesToQueue:[NSOperationQueue
mainQueue] withHandler:^(CMAcce
lerometerData * _Nullable
accelerometerData, NSError
* _Nullable error) {
if (error) {
NSLog(@"%@", error.description);
}else{
[self handleDeviceAcc:accelerometerData];
}
}];
} |
2. Êý¾ÝÅúÁ¿»¯´¦Àí
ÎÒÃÇÔÚ±¾ÎÄ¿ªÊ¼½éÉÜѵÁ·Êý¾Ý¼¯µÄʱºò£¬Ìáµ½ÁËÊý¾ÝµÄ²É¼¯ÆµÂÊÊÇ 20 Hz£¬Òò´ËÎÒÃÇÔÚ½øÐÐÊý¾Ý²É¼¯µÄʱºòÒ²ÐèҪͬÑùµÄƵÂÊ£¬²¢ÇÒ½«´«¸ÐÆ÷Êý¾Ý½øÐÐÅúÁ¿»¯´¦Àí£¬ÒÔ±ãÓÚÄ£ÐÍʶ±ðʱ¾ßÓкÏÊÊÊýÁ¿µÄÊý¾Ý¡£
NSArray *valueArr = @[ @(accelerometerData.
acceleration.x * g_value), @(accelerometerData
.acceleration.y * g_value), @(accelerometerData
.acceleration.z * -g_value)];
NSMutableDictionary *sample =
[NSMutableDictionary dictionary];
[sample setValue:currenStatus
forKey:@"status"];
[sample setValue:@"acc" forKey
:@"sensorName"];
[sample setValue:@([self
getTimeStampByMiliSeconds])
forKey:@"timestamp"];
[sample setValue:valueArr
forKey:@"values"];
if (sampleDatas == nil) {
sampleDatas = [NSMutableArray
array];
}
if ([sampleDatas count]
== 256) {
NSArray *readySamples =
[NSArray arrayWithArray:sampleDatas];
sampleDatas = nil;
[self stopMotionAccelerometer];
[self recognitionData:
[readySamples copy]];
}else{
[sampleDatas addObject:sample];
} |
3. ÌØÕ÷³éÈ¡
ÔÚ¿ªÊ¼´Ë²½Öè֮ǰ£¬ÎÒÃÇÐèÒªµ¼ÈëLIBSVMµÄÀà¿âµ½ÏîÄ¿¹¤³ÌÖУ¬ÕâÀï½öÐèÒªµ¼Èësvm.hºÍsvm.cppÁ½¸öÎļþ¼´¿É¡£
ÔÚѵÁ·Ä£Ð͵Äʱºò£¬ÎÒÃÇʹÓÃÁËÎåÖÖÌØÕ÷£¬×îÖÕÉú³ÉËùÐèÒªµÄÊý¾Ý¸ñʽ£¬ÕâÀïͬÑù£¬ÎÒÃÇÒ²ÐèÒªÕë¶ÔÊý¾Ý½øÐÐÌØÕ÷ÌáÈ¡£¬²¢ÖØÐÂ×éºÏÊý¾Ý³ÉΪLIBSVMËùÒªÇóµÄÊý¾Ý¸ñʽ£º
for (NSUInteger index = 0;
index < [raw_datas count]; index++) { NSDictionary *jsonObject
= raw_datas[index]; NSArray *valuesArray =
jsonObject[@"values"]; if (!valuesArray ||
valuesArray.count <= 0) { break; } id acc_x_num = valuesArray[0]; id acc_y_num = valuesArray[1]; id acc_z_num = valuesArray[2];
acc_x_axis[index] = acc_x_num;
acc_y_axis[index] = acc_y_num;
acc_z_axis[index] = acc_z_num;
gravity[index] = @(sqrt(pow
([acc_x_num doubleValue], 2)
+ pow([acc_y_num doubleValue],
2) + pow([acc_z_num doubleValue], 2)));
}
NSMutableArray *values =
[NSMutableArray array];
/* mean Feature */{
struct svm_node node_x_mean = {0,
[StatisticFeature mean:acc_x_axis]};
NSValue *node_x_mean_value = [NSValue
valueWithBytes:&node_x_mean objCType:
@encode(struct svm_node)];
[values addObject:node_x_mean_value];
struct svm_node node_y_mean = {1,
[StatisticFeature mean:acc_y_axis]};
NSValue *node_y_mean_value = [NSValue
valueWithBytes:&node_y_mean objCType
:@encode(struct svm_node)];
[values addObject:node_y_mean_value];
struct svm_node node_z_mean = {2,
[StatisticFeature mean:acc_z_axis]};
NSValue *node_z_mean_value = [NSValue
valueWithBytes:&node_z_mean objCType
:@encode(struct svm_node)];
[values addObject:node_z_mean_value];
struct svm_node node0 = {3,
[StatisticFeature mean:gravity]};
NSValue *value0 = [NSValue valueWithBytes:&node0
objCType:@encode(struct svm_node)];
[values addObject:value0];
}
/* max Feature */{
struct svm_node node_x_max = {4,
[StatisticFeature max:acc_x_axis]};
NSValue *node_x_max_value = [NSValue
valueWithBytes:&node_x_max objCType
:@encode(struct svm_node)];
[values addObject:node_x_max_value];
struct svm_node node_y_max = {5,
[StatisticFeature max:acc_y_axis]};
NSValue *node_y_max_value = [NSValue
valueWithBytes:&node_y_max objCType
:@encode(struct svm_node)];
[values addObject:node_y_max_value];
struct svm_node node_z_max = {6,
[StatisticFeature max:acc_z_axis]};
NSValue *node_z_max_value = [NSValue
valueWithBytes:&node_z_max objCType
:@encode(struct svm_node)];
[values addObject:node_z_max_value];
struct svm_node node1 = {7, [Statis
ticFeature max:gravity]};
NSValue *value1 = [NSValue valueWithBytes:&node1
objCType:@encode(struct svm_node)];
[values addObject:value1];
}
/* min Feature */{
struct svm_node node_x_min = {8,
[StatisticFeature min:acc_x_axis]};
NSValue *node_x_min_value = [NSValue
valueWithBytes:&node_x_min objCTyp
e:@encode(struct svm_node)];
[values addObject:node_x_min_value];
struct svm_node node_y_min = {9,
[StatisticFeature min:acc_y_axis]};
NSValue *node_y_min_value = [NSValue
valueWithBytes:&node_y_min objCTyp
e:@encode(struct svm_node)];
[values addObject:node_y_min_value];
struct svm_node node_z_min = {10,
[StatisticFeature min:acc_z_axis]};
NSValue *node_z_min_value = [NSValue
valueWithBytes:&node_z_min objCType
:@encode(struct svm_node)];
[values addObject:node_z_min_value];
struct svm_node node2 = {11,
[StatisticFeature min:gravity]};
NSValue *value2 = [NSValue
valueWithBytes:&node2 objCType:
@encode(struct svm_node)];
[values addObject:value2];
}
/* stev Feature */{
struct svm_node node_x_stev = {12,
[StatisticFeature stev:acc_x_axis]};
NSValue *node_x_stev_value = [NSValue
valueWithBytes:&node_x_stev objCType
:@encode(struct svm_node)];
[values addObject:node_x_stev_value];
struct svm_node node_y_stev = {13,
[StatisticFeature stev:acc_y_axis]};
NSValue *node_y_stev_value = [NSValue
valueWithBytes:&node_y_stev objCType:
@encode(struct svm_node)];
[values addObject:node_y_stev_value];
struct svm_node node_z_stev = {14,
[StatisticFeature stev:acc_z_axis]};
NSValue *node_z_stev_value = [NSValue
valueWithBytes:&node_z_stev objCType
:@encode(struct svm_node)];
[values addObject:node_z_stev_value];
struct svm_node node3 = {15,
[StatisticFeature stev:gravity]};
NSValue *value3 = [NSValue
valueWithBytes:&node3 objCType
:@encode(struct svm_node)];
[values addObject:value3];
} |
ÕâÀïÐèҪעÒâµÄÊÇ£¬ÌØÕ÷µÄ˳Ðò±ØÐëºÍÄ£ÐÍѵÁ·Ê±ÑµÁ·Êý¾Ý¼¯ÖеÄÌØÕ÷˳ÐòÒ»Ö£¬·ñÔòÔ¤²âµÄ½á¹û½«³öÏÖÑÏÖØµÄÆ«²î¡£
4. µ¼ÈëÄ£ÐÍÎļþ²¢¼ÓÔØ
Íê³ÉÁËÊý¾Ý×¼±¸Ö®ºó£¬ÎÒÃǵ¼Èë֮ǰѵÁ·ºÃµÄÄ£ÐÍÎļþraw_bestP_trained.modelµ½ÏîÄ¿ÖУ¬È»ºóʹÓÃLIBSVMÌṩµÄÄ£ÐͼÓÔØ·½·¨£¬¼ÓÔØÄ£Ð͵½svm_model½á¹¹Ìå¶ÔÏó£º
struct svm_model * model =
svm_load_model([model_dir UTF8String]);
if (model == NULL) {
NSLog(@"Can't open model file:
%@",model_dir);
return nil;
}
if (svm_check_probability_model
(model) == 0) {
NSLog(@"Model does not support
probabiliy estimates");
return nil;
} |
5. ÐÐΪʶ±ð
LIBSVMÌṩÁ˶à¸ö·½·¨½øÐÐÔ¤²â£¬ÎªÁË×îÖÕ¿´µ½Ô¤²âµÄ¸ÅÂÊ£¬ÎÒÃÇʹÓÃ
double svm_predict_probability
(const struct svm_model *model, const struct svm_node *x, double* prob_estimates); |
·½·¨£¬ÔÚÊä³öÔ¤²â½á¹ûµÄʱºò£¬»á´øÓжÔÓ¦µÄ¸ÅÂÊ£º
//Type of svm model int svm_type = svm_get_
svm_type(model); //Count of labels int nr_class = svm_get
_nr_class(model); //Label of svm model int *labels = (int *)
malloc(nr_class*sizeof(int)); svm_get_labels(model, labels);
// Probability of each
possible label in result
double *prob_estimates =
(double *) malloc(nr_
class*sizeof(double));
// Predicting
// result of prediction including:
// - Most possible label
// - Probability of each
possible label
double label = 0.0;
if (svm_type == C_SVC ||
svm_type == NU_SVC) {
label = svm_predict_probability
(model, X, prob_estimates);
NSLog(@"svm_predict_probability
label: %f",label);
}else{
NSLog(@"svm_type is not support !!!");
return nil;
} |
ͨ¹ýÒÔÉϵÄÔ¤²âÖ®ºó£¬×îÖÕµÄÔ¤²â½á¹û¾ÍÊÇlabel£¬²¢ÔÚ»áÔÚprob_estimatesÖÐÊä³ö¸÷¸ö·ÖÀà±êÇ©µÄÔ¤²â¸ÅÂÊ¡£
£¡£¡×¢Òâ £¡£¡
** prob_estimates Öнö½ö»áÊä³ö¸ÅÂÊ£¬²¢²»»áÊä³ö¸ÅÂʺͱêÇ©µÄ¶ÔÓ¦¹ØÏµ¡£prob_estimatesÖеĸÅÂÊ˳ÐòÊǺÍÄ£ÐÍÖеÄÊäÈë±êǩ˳ÐòÒ»Öµģ¬ÐèҪעÒ⣡
**
×îÖÕµÄÔ¤²â½á¹ûÈçÏ£º
label: 4 -- prob: 0.491513 label: 1 -- prob: 0.285421 label: 2 -- prob: 0.119973 label: 3 -- prob: 0.096848 label: 0 -- prob: 0.002580 label: 5 -- prob: 0.003665 |
¹ØÓÚÄ£ÐÍµÄÆÀ¹À
·ÖÀàÄ£Ð͵ĶÈÁ¿Óкܶ෽ʽ£¬ÀýÈç»ìÏý¾ØÕó£¨Confusion Matrix£©¡¢ROCÇúÏß¡¢AUCÃæ»ý¡¢Lift£¨ÌáÉý£©ºÍGain£¨ÔöÒæ£©¡¢K-Sͼ¡¢»ùÄáϵÊýµÈ£¬ÕâÀïÎÒÃÇʹÓÃROCÇúÏ߯À¹ÀÎÒÃÇ×îÖյõ½µÄÄ£ÐÍ£¬ÒԲ鿴ģÐ͵ÄÖÊÁ¿£¬×îÖÕµÄROCÇúÏßͼÈçÏ£º

¿ÉÒÔ¿´µ½¸ÃÄ£ÐÍÕë¶ÔijЩÐÐΪµÄʶ±ðÄÜÁ¦½ÏºÃ£¬ÀýÈçÕ¾Á¢¡¢ÂýÅÜ£¬µ«ÊǶÔÁíһЩÐÐΪµÄʶ±ðÈ´²»ÔõôºÃÁË£¬ÀýÈçÏÂÂ¥ÌÝ¡£
×ܽá
¿ÉÒÔ¿´µ½SVMÔÚ·ÖÀàÎÊÌâÉÏÄܹ»ºÜºÃµÄʶ±ðÌØÕ÷½øÐÐÀà±ðÇø·Ö¡£ÓÉÓÚÆª·ùÔÒò£¬±¾ÎÄÖв¢Ã»ÓжÔÊý¾ÝµÄÌØÕ÷½øÐиü¼ÓϸÖµÄÑ¡ÔñºÍ³éÈ¡£¬¿ÉÄܻᵼÖÂһЩÐÐΪÀàÐ͵Äʶ±ð²»ÄÜ´ïµ½ÀíÏëµÄЧ¹û£¬µ«ÊÇÏàÐÅÔÚ×ãÁ¿µÄÊý¾ÝÏ£¬½øÐиü¼ÓϸÖµÄÌØÕ÷¹¤³Ìºó£¬ÀûÓÃSVMÔÚ·ÖÀàÄÜÁ¦ÉϵÄÓÅÊÆ£¬Äܹ»¹¹½¨³ö¸ü¼ÓÓÅÐãµÄÈËÀàÐÐΪÀàÐÍʶ±ðµÄÖÇÄÜÓ¦Óᣠ|