<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ??碼云GVP開源項目 12k star Uniapp+ElementUI 功能強大 支持多語言、二開方便! 廣告
                # 一個標準的人類活動識別問題的溫和介紹 > 原文: [https://machinelearningmastery.com/how-to-load-and-explore-a-standard-human-activity-recognition-problem/](https://machinelearningmastery.com/how-to-load-and-explore-a-standard-human-activity-recognition-problem/) 人類活動識別是將由專用線束或智能電話記錄的加速度計數據序列分類為已知的明確定義的運動的問題。 鑒于每秒產生大量觀測結果,觀測的時間性質以及缺乏將加速度計數據與已知運動聯系起來的明確方法,這是一個具有挑戰性的問題。 該問題的經典方法涉及來自基于固定大小窗口的時間序列數據的手工制作特征和訓練機器學習模型,例如決策樹的集合。困難在于此功能工程需要該領域的深厚專業知識。 最近,諸如循環神經網絡和一維卷積神經網絡或 CNN 的深度學習方法已經被證明在很少或沒有數據特征工程的情況下提供具有挑戰性的活動識別任務的最新結果。 在本教程中,您將發現用于時間序列分類的標準人類活動識別數據集以及如何在建模之前探索數據集。 完成本教程后,您將了解: * 如何加載和準備人類活動識別時間序列分類數據。 * 如何探索和可視化時間序列分類數據,以生成建模的想法。 * 一套用于構建問題,準備數據,建模和評估人類活動識別模型的方法。 讓我們開始吧。 ![A Gentle Introduction to a Standard Human Activity Recognition Problem](https://img.kancloud.cn/83/8a/838a9ed35554557c7b58cbd78aca4f4c_640x480.jpg) 標準人類活動識別問題的溫和介紹 [tgraham](https://www.flickr.com/photos/tgraham/2546626192/) 的照片,保留一些權利。 ## 教程概述 本教程分為 8 個部分;他們是: 1. 人類活動識別 2. 問題描述 3. 加載數據集 4. 繪制單個主題的跟蹤 5. 繪制總活動持續時間 6. 繪制每個主題的痕跡 7. 繪制痕量觀測的直方圖 8. 建模問題的方法 ## 人類活動識別 [人類活動識別](https://en.wikipedia.org/wiki/Activity_recognition)或簡稱 HAR,是基于使用傳感器的移動痕跡來預測人正在做什么的問題。 運動通常是正常的室內活動,例如站立,坐著,跳躍和上樓梯。傳感器通常位于主體上,例如智能手機或背心,并且經常以三維(x,y,z)記錄加速度計數據。 這個想法是,一旦主體的活動被識別和知道,智能計算機系統就可以提供幫助。 這是一個具有挑戰性的問題,因為沒有明確的分析方法將傳感器數據與一般方式的特定動作聯系起來。由于收集了大量的傳感器數據(例如,每秒數十或數百次觀察),并且在開發預測模型時從這些數據中經典使用手工制作的特征和啟發式,因此在技術上具有挑戰性。 最近,深度學習方法已經在 HAR 問題上取得了成功,因為它們能夠自動學習更高階的特征。 > 基于傳感器的活動識別從大量低水平傳感器讀數中尋找關于人類活動的深刻的高級知識。傳統的模式識別方法在過去幾年中取得了巨大的進步。然而,這些方法通常嚴重依賴于啟發式手工特征提取,這可能會妨礙它們的泛化表現。 [...]最近,深度學習的最新進展使得可以執行自動高級特征提取,從而在許多領域實現了有希望的表現。 - [基于傳感器的活動識別深度學習:調查](https://arxiv.org/abs/1707.03502) ## 問題描述 收集數據集“來自單個胸部安裝的加速度計數據集的 _ 活動識別”并由 Casale,Pujol 等人提供。來自西班牙巴塞羅那大學。_ 它可以從 UCI 機器學習庫免費獲得: * [來自單個胸部加速計數據集](https://archive.ics.uci.edu/ml/datasets/Activity+Recognition+from+Single+Chest-Mounted+Accelerometer),UCI 機器學習庫的活動識別。 在 2011 年論文“[使用可穿戴設備的加速度計數據](https://link.springer.com/chapter/10.1007/978-3-642-21257-4_36)[人類活動識別](https://link.springer.com/chapter/10.1007/978-3-642-21257-4_36)”中描述并使用該數據集作為序列分類模型的基礎。 數據集由來自 15 個不同科目的未校準加速度計數據組成,每個科目執行 7 項活動。每個受試者佩戴定制的胸部加速度計,并以 52Hz(每秒 52 次觀察)收集數據。 ![Photographs of the custom chest-mounted systems warn by each subject](https://img.kancloud.cn/33/f8/33f8280b7de322509d45e9333ce4e784_1408x472.jpg) 每個主題佩戴的定制胸部系統的照片。 取自“使用可穿戴設備從加速度計數據中識別人體活動”。 每個受試者以連續的順序進行和記錄七項活動。 所開展的具體活動包括: * 1:在計算機工作(workingPC)。 * 2:站起來,走路,上下樓梯。 * 3:站立(站立)。 * 4:散步(醒來)。 * 5:上/下樓梯(樓梯)。 * 6:與某人散步和交談。 * 7:站立時說話(說話)。 該論文使用了數據的一個子集,特別是 14 個主題和 5 個活動。目前尚不清楚為什么沒有使用其他 2 項活動(2 和 6)。 > 數據來自 14 名測試者,3 名女性和 11 名年齡在 27 歲至 35 歲之間的男性。[...]所收集的數據由上下樓梯步行 33 分鐘,步行 82 分鐘,說話 115 分鐘組成。保持站立的分鐘數和 86 分鐘的電腦工作時間。 - [使用可穿戴設備從加速計數據識別人類活動](https://link.springer.com/chapter/10.1007/978-3-642-21257-4_36),2011。 本文的重點是從數據開發手工制作的功能,以及機器學習算法的開發。 數據被分成一秒鐘的觀察窗口(52),窗口之間有 50%的重疊。 > 我們使用 52 個樣本的窗口從數據中提取特征,對應于 1 秒的加速度計數據,窗口之間有 50%的重疊。從每個窗口,我們建議提取以下特征:窗口中加速度積分的均方根值,以及 Minmax 和的平均值。 [...]盡管如此,為了完成這組特征,我們添加了已被證明對人類活動識別有用的特征,如:平均值,標準偏差,偏度,峰度,加速度計軸的每對成對之間的相關性(不包括幅度) ,七級小波分解系數的能量。通過這種方式,我們獲得了 319 維特征向量。 - [使用可穿戴設備從加速計數據識別人類活動](https://link.springer.com/chapter/10.1007/978-3-642-21257-4_36),2011。 使用 5 倍交叉驗證擬合和評估一套機器學習模型,并獲得 94%的準確度。 ![Confusion Matrix of Random Forest evaluated on the dataset](https://img.kancloud.cn/89/02/89024d5ec4d02586b20dffcb2a868ef5_988x350.jpg) 隨機森林的混淆矩陣在數據集上進行評估。 取自“使用可穿戴設備從加速度計數據中識別人體活動”。 ## 加載數據集 數據集可以直接從 UCI 機器學習庫下載。 * [下載數據集](https://archive.ics.uci.edu/ml/machine-learning-databases/00287/Activity%20Recognition%20from%20Single%20Chest-Mounted%20Accelerometer.zip) 將數據集解壓縮到名為“ _HAR_ ”的新目錄中。 該目錄包含 CSV 文件列表,每個主題一個(1-15)和自述文件。 每個文件包含 5 列,行號,x,y 和 z 加速度計讀數以及 0 到 7 的類號,其中類 0 表示“無活動”,類 1-7 對應于上一節中列出的活動。 例如,下面是文件“ _1.csv_ ”的前 5 行: ```py 0,1502,2215,2153,1 1,1667,2072,2047,1 2,1611,1957,1906,1 3,1601,1939,1831,1 4,1643,1965,1879,1 ... ``` 首先,我們可以將每個文件作為單個 NumPy 數組加載并刪除第一列。 下面名為 _load_dataset()_ 的函數將加載 HAR 目錄中的所有 CSV 文件,刪除第一列并返回 15 個 NumPy 數組的列表。 ```py # load sequence for each subject, returns a list of numpy arrays def load_dataset(prefix=''): subjects = list() directory = prefix + 'HAR/' for name in listdir(directory): filename = directory + '/' + name if not filename.endswith('.csv'): continue df = read_csv(filename, header=None) # drop row number values = df.values[:, 1:] subjects.append(values) return subjects ``` 下面列出了完整的示例。 ```py # load dataset from os import listdir from pandas import read_csv # load sequence for each subject, returns a list of numpy arrays def load_dataset(prefix=''): subjects = list() directory = prefix + 'HAR/' for name in listdir(directory): filename = directory + '/' + name if not filename.endswith('.csv'): continue df = read_csv(filename, header=None) # drop row number values = df.values[:, 1:] subjects.append(values) return subjects # load subjects = load_dataset() print('Loaded %d subjects' % len(subjects)) ``` 運行該示例將加載所有數據并打印已加載主題的數量。 ```py Loaded 15 subjects ``` 注意,目錄中的文件是按文件順序導航的,這可能與主題順序不同,例如 _10.csv_ 以文件順序出現在 _2.csv_ 之前。我相信這在本教程中無關緊要。 現在我們知道了如何加載數據,我們可以通過一些可視化來探索它。 ## 繪制單個主題的跟蹤 良好的第一個可視化是繪制單個主題的數據。 我們可以為給定主題的每個變量創建一個圖形,包括 x,y 和 z 加速度計數據,以及相關的類類值。 下面的函數 _plot_subject()_ 將繪制給定主題的數據。 ```py # plot the x, y, z acceleration and activities for a single subject def plot_subject(subject): pyplot.figure() # create a plot for each column for col in range(subject.shape[1]): pyplot.subplot(subject.shape[1], 1, col+1) pyplot.plot(subject[:,col]) pyplot.show() ``` 我們可以將它與上一節中的數據加載結合起來,并繪制第一個加載主題的數據。 ```py # plot a subject from os import listdir from pandas import read_csv from matplotlib import pyplot # load sequence for each subject, returns a list of numpy arrays def load_dataset(prefix=''): subjects = list() directory = prefix + 'HAR/' for name in listdir(directory): filename = directory + '/' + name if not filename.endswith('.csv'): continue df = read_csv(filename, header=None) # drop row number values = df.values[:, 1:] subjects.append(values) return subjects # plot the x, y, z acceleration and activities for a single subject def plot_subject(subject): pyplot.figure() # create a plot for each column for col in range(subject.shape[1]): pyplot.subplot(subject.shape[1], 1, col+1) pyplot.plot(subject[:,col]) pyplot.show() # load subjects = load_dataset() print('Loaded %d subjects' % len(subjects)) # plot activities for a single subject plot_subject(subjects[0]) ``` 運行該示例為第一個加載主題的每個變量創建一個線圖。 我們可以在序列的開頭看到一些非常大的運動,這可能是一個可以被刪除的異常或異常行為。 我們還可以看到主題多次執行某些操作。例如,仔細查看類變量的圖(底部圖)表明受試者按以下順序執行活動:1,2,0,3,0,4,3,5,3,6,7。活動 3 進行了兩次。 ![Line plots of x, y, z and class for the first loaded subject.](https://img.kancloud.cn/1c/3b/1c3b364e71fd52d7ca69d95b19ed4ff6_1280x960.jpg) 第一個加載主題的 x,y,z 和類的線圖。 我們可以重新運行此代碼并繪制第二個加載的主題(可能是 _10.csv_ )。 ```py ... # plot activities for a single subject plot_subject(subjects[1]) ``` 運行該示例會創建一個類似的圖。 我們可以看到更多細節,這表明在上一個情節開頭看到的大異常值可能是從該主題的痕跡中清除了值。 我們看到類似的活動序列,活動 3 再次發生兩次。 我們還可以看到,某些活動的執行時間比其他活動長得多。這可能會影響模型區分活動的能力,例如:兩個受試者的活動 3(站立)相對于所進行的其他活動具有非常少的數據。 ![Line plots of x, y, z and class for the second loaded subject.](https://img.kancloud.cn/73/91/739115e0de8a5fdfe850ede0035dee8d_1280x960.jpg) 第二個加載主題的 x,y,z 和類的線圖。 ## 繪制總活動持續時間 上一節提出了一個問題,即我們對所有主題的每項活動進行了多長時間或多少次觀察。 如果一項活動的數據多于另一項活動,這可能很重要,這表明不太好的活動可能難以建模。 我們可以通過按活動和主題對所有觀察進行分組來研究這一點,并繪制分布圖。這將了解每個主題在跟蹤過程中花費多長時間執行每項活動。 首先,我們可以為每個主題分組活動。 我們可以通過為每個主題創建字典并按活動存儲所有跟蹤數據來完成此操作。下面的 _group_by_activity()_ 功能將為每個主題執行此分組。 ```py # returns a list of dict, where each dict has one sequence per activity def group_by_activity(subjects, activities): grouped = [{a:s[s[:,-1]==a] for a in activities} for s in subjects] return grouped ``` 接下來,我們可以計算每個主題的每個活動的總持續時間。 我們知道加速度計數據是以 52Hz 記錄的,因此我們可以將每個活動的每個跟蹤的長度除以 52,以便以秒為單位總結持續時間。 以下名為 _plot_durations()_ 的函數將計算每個主題的每個活動的持續時間,并將結果繪制為箱線圖。盒狀和須狀圖是總結每個活動的 15 個持續時間的有用方式,因為它描述了持續時間的擴展而不假設分布。 ```py # calculate total duration in sec for each activity per subject and plot def plot_durations(grouped, activities): # calculate the lengths for each activity for each subject freq = 52 durations = [[len(s[a])/freq for s in grouped] for a in activities] pyplot.boxplot(durations, labels=activities) pyplot.show() ``` 下面列出了繪制活動持續時間分布的完整示例。 ```py # durations by activity from os import listdir from pandas import read_csv from matplotlib import pyplot # load sequence for each subject, returns a list of numpy arrays def load_dataset(prefix=''): subjects = list() directory = prefix + 'HAR/' for name in listdir(directory): filename = directory + '/' + name if not filename.endswith('.csv'): continue df = read_csv(filename, header=None) # drop row number values = df.values[:, 1:] subjects.append(values) return subjects # returns a list of dict, where each dict has one sequence per activity def group_by_activity(subjects, activities): grouped = [{a:s[s[:,-1]==a] for a in activities} for s in subjects] return grouped # calculate total duration in sec for each activity per subject and plot def plot_durations(grouped, activities): # calculate the lengths for each activity for each subject freq = 52 durations = [[len(s[a])/freq for s in grouped] for a in activities] pyplot.boxplot(durations, labels=activities) pyplot.show() # load subjects = load_dataset() print('Loaded %d subjects' % len(subjects)) # group traces by activity for each subject activities = [i for i in range(0,8)] grouped = group_by_activity(subjects, activities) # plot durations plot_durations(grouped, activities) ``` 運行該示例繪制了每個主題的活動持續時間的分布。 我們可以看到,對于活動 0(無活動),2(站立,行走和上下樓梯),5(上/下樓梯)和 6(步行和說話)的觀察相對較少。 這可能表明為什么活動 2 和 6 被排除在原始論文的實驗之外。 我們還可以看到每個主題在活動 1(站立,行走和上下樓梯)和活動 7(站立時說話)上花費了大量時間。這些活動可能過多。準備模型數據可能有益于對這些活動進行欠采樣或對其他活動進行采樣。 ![Boxplot of the distribution of activity durations per subject](https://img.kancloud.cn/0d/26/0d26937889f2fd1231390bef758f2619_1280x960.jpg) 每個受試者活動持續時間分布的箱線圖 ## 繪制每個主題的痕跡 接下來,查看每個主題的跟蹤數據可能會很有趣。 一種方法是在單個圖形上繪制單個主題的所有跡線,然后垂直排列所有圖形。這將允許跨主題和主題內的痕跡進行比較。 以下名為 _plot_subjects()_ 的函數將在單獨的圖上繪制 15 個主題中每個主題的加速度計數據。每個 x,y 和 z 數據的跡線分別繪制為橙色,綠色和藍色。 ```py # plot the x, y, z acceleration for each subject def plot_subjects(subjects): pyplot.figure() # create a plot for each subject for i in range(len(subjects)): pyplot.subplot(len(subjects), 1, i+1) # plot each of x, y and z for j in range(subjects[i].shape[1]-1): pyplot.plot(subjects[i][:,j]) pyplot.show() ``` 下面列出了完整的示例。 ```py # plot accelerometer data for all subjects from os import listdir from pandas import read_csv from matplotlib import pyplot # load sequence for each subject, returns a list of numpy arrays def load_dataset(prefix=''): subjects = list() directory = prefix + 'HAR/' for name in listdir(directory): filename = directory + '/' + name if not filename.endswith('.csv'): continue df = read_csv(filename, header=None) # drop row number values = df.values[:, 1:] subjects.append(values) return subjects # plot the x, y, z acceleration for each subject def plot_subjects(subjects): pyplot.figure() # create a plot for each subject for i in range(len(subjects)): pyplot.subplot(len(subjects), 1, i+1) # plot each of x, y and z for j in range(subjects[i].shape[1]-1): pyplot.plot(subjects[i][:,j]) pyplot.show() # load subjects = load_dataset() print('Loaded %d subjects' % len(subjects)) # plot trace data for each subject plot_subjects(subjects) ``` 運行該示例將創建一個包含 15 個圖的圖形。 我們正在研究一般而非具體的趨勢。 * 我們可以看到很多橙色和綠色以及非常小的藍色,這表明 z 數據在建模這個問題時可能不太重要。 * 我們可以看到跟蹤數據在 x 和 y 跟蹤的相同時間發生相同的一般變化,這表明可能只需要一個數據軸來擬合預測模型。 * 我們可以看到每個受試者在序列開始時(前 60 秒)在跡線中具有相同的大尖峰,可能與實驗的啟動有關。 * 我們可以在跟蹤數據中看到跨主題的類似結構,盡管某些跡線看起來比其他跡線更柔和,例如比較第一和第二個圖上的幅度。 每個受試者可具有不同的完整跡線長度,因此通過 x 軸的直接比較可能是不合理的(例如,同時執行類似的活動)。無論如何,我們并不真正關心這個問題。 ![Line plots of accelerometer trace data for all 15 subjects.](https://img.kancloud.cn/37/f6/37f66d3ea0518324f6e61cdfb44b8090_1280x960.jpg) 所有 15 名受試者的加速度計跟蹤數據的線圖。 痕跡似乎具有相同的一般比例,但受試者之間的幅度差異表明,每個受試者重新縮放數據可能比跨受試者縮放更有意義。 這對于訓練數據可能是有意義的,但對于縮放測試對象的數據可能在方法上具有挑戰性。它需要或假設在預測活動之前可以獲得整個跟蹤。這對于模型的離線使用很好,但不能在線使用模型。它還表明,使用預先校準的跟蹤數據(例如以固定規模進入的數據)可以更容易地在線使用模型。 ## 繪制痕量觀測的直方圖 上一節中關于跨不同主題的顯著不同尺度可能性的觀點可能會給這個數據集的建模帶來挑戰。 我們可以通過繪制加速度計數據的每個軸的觀測分布的直方圖來探索這一點。 與上一節一樣,我們可以為每個主題創建一個繪圖,然后將所有主題的繪圖與相同的 x 軸垂直對齊,以幫助發現展開的明顯差異。 更新的 _plot_subjects()_ 函數用于繪制直方圖而不是線圖,如下所示。 _hist()_ 函數用于為加速度計數據的每個軸創建直方圖,并且使用大量箱(100)來幫助展開圖中的數據。子圖也都共享相同的 x 軸以幫助進行比較。 ```py # plot the x, y, z acceleration for each subject def plot_subjects(subjects): pyplot.figure() # create a plot for each subject xaxis = None for i in range(len(subjects)): ax = pyplot.subplot(len(subjects), 1, i+1, sharex=xaxis) if i == 0: xaxis = ax # plot a histogram of x data for j in range(subjects[i].shape[1]-1): pyplot.hist(subjects[i][:,j], bins=100) pyplot.show() ``` 下面列出了完整的示例 ```py # plot histograms of trace data for all subjects from os import listdir from pandas import read_csv from matplotlib import pyplot # load sequence for each subject, returns a list of numpy arrays def load_dataset(prefix=''): subjects = list() directory = prefix + 'HAR/' for name in listdir(directory): filename = directory + '/' + name if not filename.endswith('.csv'): continue df = read_csv(filename, header=None) # drop row number values = df.values[:, 1:] subjects.append(values) return subjects # plot the x, y, z acceleration for each subject def plot_subjects(subjects): pyplot.figure() # create a plot for each subject xaxis = None for i in range(len(subjects)): ax = pyplot.subplot(len(subjects), 1, i+1, sharex=xaxis) if i == 0: xaxis = ax # plot a histogram of x data for j in range(subjects[i].shape[1]-1): pyplot.hist(subjects[i][:,j], bins=100) pyplot.show() # load subjects = load_dataset() print('Loaded %d subjects' % len(subjects)) # plot trace data for each subject plot_subjects(subjects) ``` 運行該示例將創建一個包含 15 個圖的單個圖形,每個圖形對應一個圖形,以及每個圖表的 3 個加速度計數據的 3 個直方圖。 藍色,橙色和綠色三種顏色代表 x,y 和 z 軸。 該圖表明加速度計的每個軸的分布是高斯分布或者非常接近高斯分布。這可以幫助沿著加速度計數據的每個軸進行簡單的離群值檢測和移除。 該圖確實有助于顯示主題內的分布與主題之間的分布差異。 在每個主題內,共同模式是 x(藍色)和 z(綠色)一起分組到左邊,y 數據(橙色)分開到右邊。 y 的分布通常更尖銳,因為 x 和 z 的分布更平坦。 在整個主題中,我們可以看到一般的聚類值約為 2,000(無論單位是多少),盡管有很多差異。這種顯著的分布差異確實表明在執行任何跨主題建模之前,需要至少標準化(轉換為零均值和單位方差)每個軸和每個主體的數據。 ![Histograms of accelerometer data for each subject](https://img.kancloud.cn/a4/04/a40492994d19103a01b25b6b63c632ae_1280x960.jpg) 每個受試者的加速度計數據的直方圖 ## 建模問題的方法 在本節中,我們將基于對數據集的上述探索,探索針對該問題的數據準備和建模的一些想法和方法。 這些可能有助于特別是對該數據集建模,但也有助于人類活動識別,甚至是一般的時間序列分類問題。 ### 問題框架 盡管所有方法都圍繞時間序列分類的思想,但有許多方法可以將數據構建為預測建模問題。 要考慮的兩種主要方法是: * **每個受試者**:每個受試者的痕量數據的模型活動分類。 * **交叉主題**:跨主題的跟蹤數據的模型活動分類。 后者,交叉主題,是更理想的,但如果目標是深刻理解給定的主題,例如前者也可能是有趣的。家中的個性化模型。 在建模過程中構建數據的兩種主要方法包括: * **分段活動**:跟蹤數據可以按活動預先分段,并且可以針對每個活動對整個跟蹤或其特征進行訓練的模型。 * **滑動窗口**:每個主體的連續軌跡被分成滑動窗口,有或沒有重疊,窗口的每個活動的模式被視為要預測的活動。 就模型的實際使用而言,前一種方法可能不太現實,但可能是更容易建模的問題。后者是原始論文中使用的問題的框架,其中制備了具有 50%重疊的 1 秒窗口。 我沒有看到問題框架中的重疊的好處,除了加倍訓練數據集的大小,這可能有益于深度神經網絡。事實上,我預計它可能會導致過度模型。 ### 數據準備 數據表明在建模過程中可能有用的一些準備方案: * 將加速度計觀測值下采樣到幾分之一秒可能是有幫助的,例如, 1 / 4,1 / 2,1,2 秒。 * 截斷原始數據的前 60 秒可能是謹慎的,因為它似乎與實驗的啟動有關,并且所有主體當時正在執行活動 1(在計算機上工作)。 * 使用簡單的離群值檢測和去除方法(例如,每個軸的平均值的標準差的 3 到 4 倍的值)可能是有用的。 * 也許刪除具有相對較少觀察的活動將是明智的,或者導致對預測方法(例如,活動 0,2 和 6)的更公平的評估。 * 也許通過對代表性不足的活動進行過度采樣或對訓練數據集中過度代表的活動進行抽樣調整來重新平衡活動可能有助于建模。 * 嘗試不同的窗口尺寸將是有趣的(例如 1,5,10,30 秒),尤其是在對觀察的下采樣的確證中。 * 對于任何跨主題模型,幾乎肯定需要標準化每個主題的數據。在每個受試者標準化后對受試者的數據進行標準化也可能是有用的。 如前一節所述,每個主題的數據標準化確實引入了方法問題,并且無論如何都可以使用,因為需要來自原始硬件系統的校準觀察。 ### 問題建模 我建議使用神經網絡來探索這個問題。 與使用特征工程和特定于域的手工制作特征的論文中使用的方法不同,直接對原始數據進行建模(下采樣或其他方式)將是有用且通用的。 首先,我建議使用強大的方法(如隨機森林或梯度增強機器)發現表現基線。然后探索特別適合時間序列分類問題的神經網絡方法。 可能適合的兩種類型的神經網絡架構是: * 卷積神經網絡或 CNN。 * 循環神經網絡或 RNN,特別是長短期記憶或 LSTM。 第三個是兩者的混合: * CNN LSTMs。 CNN 能夠從輸入序列中提取特征,例如輸入加速度計數據的窗口。諸如 LSTM 之類的 RNN 能夠直接從長序列的輸入數據中學習,并學習數據中的長期關系。 我希望序列數據中幾乎沒有因果關系,除了每個主題看起來他們正在執行相同的人為行動序列,我們不想學習。樸素地,這可能表明 CNN 更適合于在給定一系列觀察到的加速度計數據的情況下預測活動。 一維 CNN 已廣泛用于此類問題,其中一個通道用于加速度計數據的每個軸。一個很好的簡單起點是直接在序列數據的窗口上擬合 CNN 模型。這是 2014 年題為“[使用移動傳感器進行人類活動識別的卷積神經網絡](https://ieeexplore.ieee.org/abstract/document/7026300/)”的論文中描述的方法,并且從下面的圖中可以看出更清楚。 ![Example of 1D CNN Architecture for Human Activity Recognition](https://img.kancloud.cn/0b/e5/0be5eb2d689add1cc84ad055aaf1d7e4_908x816.jpg) 用于人類活動識別的 1D CNN 架構的示例 取自“使用移動傳感器的用于人類活動識別的卷積神經網絡”。 CNN LSTM 可用于 CNN 學習觀察子序列的表示,然后 LSTM 學習這些子序列。 例如,CNN 可以提取一秒鐘的加速度計數據,然后可以重復 30 秒,以向 LSTM 提供 30 個 CNN 解釋數據的時間步長。 我希望這三個方法對這個問題和類似的問題都很有意思。 ### 模型評估 我不認為窗口的重疊是有用的,并且實際上如果在交叉驗證期間跟蹤數據的部分在訓練和測試數據集中都可用,則實際上可能導致輕微的誤導性結果。然而,它會增加訓練數據的數量。 我認為重要的是將數據暴露給模型,同時保持觀察的時間順序。對于給定主題,來自單個活動的多個窗口可能看起來相似,并且隨機改組和分離窗口以訓練測試數據可能導致誤導結果。 我不建議在原始論文中使用隨機改組的 k-fold 交叉驗證。我希望這會帶來樂觀的結果,每個 15 個主題的痕跡中有一秒鐘的數據窗口混合在一起進行訓練和測試。 也許對這些數據中的模型進行公平評估將是按主題使用留一法交叉驗證或 LOOCV。這是模型適合前 14 個主題并在第 15 個主題的所有窗口上進行評估的地方。重復該過程,其中每個受試者有機會被用作保持測試數據集。 按主題分割數據集避免了在模型評估期間與各個窗口的時間排序相關的任何問題,因為所有窗口都將保證新的/看不見的數據。 如果你探索這些建模思想中的任何一個,我很想知道。 ## 進一步閱讀 如果您希望深入了解,本節將提供有關該主題的更多資源。 ### 文件 * [使用加速度計進行活動識別的綜合研究](http://mdpi.com/2227-9709/5/2/27),2018 * [基于傳感器的活動識別深度學習:調查](https://arxiv.org/abs/1707.03502),2017。 * [使用可穿戴設備從加速度計數據識別人類活動](https://link.springer.com/chapter/10.1007/978-3-642-21257-4_36),2011。 * [用于使用移動傳感器識別人類活動的卷積神經網絡](https://ieeexplore.ieee.org/abstract/document/7026300/),2014。 ### API * [sklearn.preprocessing.StandardScaler API](http://scikit-learn.org/stable/modules/generated/sklearn.preprocessing.StandardScaler.html) * [sklearn.preprocessing.MinMaxScaler API](http://scikit-learn.org/stable/modules/generated/sklearn.preprocessing.MinMaxScaler.html) * [keras.utils.to_categorical API](https://keras.io/utils/#to_categorical) * [Keras 卷積層](https://keras.io/layers/convolutional/) ### 用品 * [活動識別,維基百科](https://en.wikipedia.org/wiki/Activity_recognition) * [來自單個胸部加速計數據集](https://archive.ics.uci.edu/ml/datasets/Activity+Recognition+from+Single+Chest-Mounted+Accelerometer),UCI 機器學習庫的活動識別。 ## 摘要 在本教程中,您發現了一個用于時間序列分類的標準人類活動識別數據集。 具體來說,你學到了: * 如何加載和準備人類活動識別時間序列分類數據。 * 如何探索和可視化時間序列分類數據,以生成建模的想法。 * 一套用于構建問題,準備數據,建模和評估人類活動識別模型的方法。 你有任何問題嗎? 在下面的評論中提出您的問題,我會盡力回答。
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看