# 如何從智能手機數據模擬人類活動
> 原文: [https://machinelearningmastery.com/how-to-model-human-activity-from-smartphone-data/](https://machinelearningmastery.com/how-to-model-human-activity-from-smartphone-data/)
人類活動識別是將由專用線束或智能電話記錄的加速度計數據序列分類為已知的明確定義的運動的問題。
鑒于每秒產生大量觀測結果,觀測的時間性質以及缺乏將加速度計數據與已知運動聯系起來的明確方法,這是一個具有挑戰性的問題。
該問題的經典方法涉及基于固定大小的窗口和訓練機器學習模型(例如決策樹的集合)的時間序列數據中的手工制作特征。困難在于此功能工程需要該領域的深厚專業知識。
最近,諸如循環神經網絡和一維卷積神經網絡(CNN)之類的深度學習方法已經被證明在很少或沒有數據特征工程的情況下提供具有挑戰性的活動識別任務的最新結果。
在本教程中,您將發現用于時間序列分類的'_ 活動識別使用智能手機 _'數據集,以及如何加載和探索數據集以使其為預測建模做好準備。
完成本教程后,您將了解:
* 如何下載數據集并將其加載到內存中。
* 如何使用線圖,直方圖和箱線圖來更好地理解運動數據的結構。
* 如何建模問題,包括框架,數據準備,建模和評估。
讓我們開始吧。

如何從智能手機數據模擬人類活動
照片由[攝影師](https://www.flickr.com/photos/corker888/23930933844/),保留一些權利。
## 教程概述
本教程分為 10 個部分;他們是:
1. 人類活動識別
2. 使用智能手機數據集進行活動識別
3. 下載數據集
4. 加載數據
5. 活動類平衡
6. 繪制一個主題的時間序列數據
7. 繪制每個主題的直方圖
8. 繪制每個活動的直方圖
9. 繪制活動持續時間箱圖
10. 建模方法
## 1.人類活動識別
[人類活動識別](https://en.wikipedia.org/wiki/Activity_recognition),或簡稱為 HAR,是基于使用傳感器的移動痕跡來預測人正在做什么的問題。
運動通常是正常的室內活動,例如站立,坐著,跳躍和上樓梯。
傳感器通常位于主體上,例如智能手機或背心,并且經常以三維(x,y,z)記錄加速度計數據。
> 人類活動識別(HAR)旨在識別由一個人對他/她自己和周圍環境進行一組觀察所執行的動作。識別可以通過利用從各種來源(例如環境或身體佩戴的傳感器)檢索的信息來實現。
- [使用智能手機進行人類活動識別的公共領域數據集](https://upcommons.upc.edu/handle/2117/20897),2013 年。
這個想法是,一旦主體的活動被識別和知道,智能計算機系統就可以提供幫助。
這是一個具有挑戰性的問題,因為沒有明確的分析方法將傳感器數據與一般方式的特定動作聯系起來。由于收集了大量的傳感器數據(例如,每秒數十或數百次觀察),并且在開發預測模型時從這些數據中經典使用手工制作的特征和啟發式,因此在技術上具有挑戰性。
最近,深度學習方法已經成功地證明了 HAR 問題,因為它們能夠自動學習更高階的特征。
> 基于傳感器的活動識別從大量低水平傳感器讀數中尋找關于人類活動的深刻的高級知識。傳統的模式識別方法在過去幾年中取得了巨大的進步。然而,這些方法通常嚴重依賴于啟發式手工特征提取,這可能會妨礙它們的泛化表現。 [...]最近,深度學習的最新進展使得可以執行自動高級特征提取,從而在許多領域實現了有希望的表現。
- [基于傳感器的活動識別深度學習:調查](https://arxiv.org/abs/1707.03502)
## 2.使用智能手機數據集識別活動
標準人類活動識別數據集是 2012 年提供的“_ 活動識別使用智能手機 _”數據集。
它由 Davide Anguita 等人準備并提供。來自意大利熱那亞大學的 2013 年論文“[使用智能手機進行人類活動識別的公共領域數據集](https://upcommons.upc.edu/handle/2117/20897)”中對該數據集進行了全面描述。該數據集在他們的 2012 年論文中用機器學習算法建模,標題為“[使用多類硬件友好支持向量機](https://link.springer.com/chapter/10.1007/978-3-642-35395-6_30)在智能手機上進行人類活動識別。“
數據集可用,可以從 UCI 機器學習庫免費下載:
* [使用智能手機數據集進行人類活動識別](https://archive.ics.uci.edu/ml/datasets/human+activity+recognition+using+smartphones)
該數據來自 30 名年齡在 19 至 48 歲之間的受試者,他們進行 6 項標準活動中的一項,同時佩戴記錄運動數據的腰部智能手機。記錄執行活動的每個受試者的視頻,并從這些視頻手動標記移動數據。
以下是在記錄其移動數據的同時執行活動的主體的示例視頻。
<iframe allow="autoplay; encrypted-media" allowfullscreen="" frameborder="0" height="375" src="https://www.youtube.com/embed/XOEN9W05_4A?feature=oembed" width="500"></iframe>
進行的六項活動如下:
1. 步行
2. 走上樓
3. 走樓下
4. 坐在
5. 常設
6. 鋪設
記錄的運動數據是來自智能手機的 x,y 和 z 加速度計數據(線性加速度)和陀螺儀數據(角速度),特別是[三星 Galaxy S II](https://en.wikipedia.org/wiki/Samsung_Galaxy_S_II) 。
以 50Hz(即每秒 50 個數據點)記錄觀察結果。每個受試者進行兩次活動,一次是左側設備,另一次是右側設備。
> 選擇了一組 30 名志愿者,年齡從 19 歲到 48 歲不等。每個人都被要求遵循活動協議,同時佩戴腰部安裝的三星 Galaxy S II 智能手機。六個選定的 ADL 是站立,坐下,放下,走路,走樓下和樓上。每個受試者執行兩次協議:在第一次試驗中,智能手機固定在皮帶的左側,而第二次試驗由用戶自己放置為首選
- [使用智能手機進行人類活動識別的公共領域數據集](https://upcommons.upc.edu/handle/2117/20897),2013。
原始數據不可用。相反,可以使用預處理版本的數據集。
預處理步驟包括:
* 使用噪聲濾波器預處理加速度計和陀螺儀。
* 將數據拆分為 2.56 秒(128 個數據點)的固定窗口,重疊率為 50%。
* 將加速度計數據分割為重力(總)和身體運動分量。
> 使用中值濾波器和具有 20Hz 截止頻率的 3 階低通巴特沃斯濾波器對這些信號進行預處理以降低噪聲。 [...]加速度信號,具有重力和身體運動成分,使用另一個巴特沃斯低通濾波器分離成身體加速度和重力。
- [使用智能手機進行人類活動識別的公共領域數據集](https://upcommons.upc.edu/handle/2117/20897),2013 年。
特征工程應用于窗口數據,并且提供具有這些工程特征的數據的副本。
從每個窗口提取在人類活動識別領域中常用的許多時間和頻率特征。結果是 561 元素的特征向量。
根據受試者的數據,將數據集分成訓練(70%)和測試(30%)組。訓練 21 個,測試 9 個。
這表明問題的框架,其中一系列運動活動被用作輸入來預測當前正在進行的活動的部分(2.56 秒),其中使用已知受試者訓練的模型來預測新受試者的運動活動。 。
使用旨在用于智能手機的支持向量機(例如定點算術)的早期實驗結果導致測試數據集的預測準確度為 89%,實現與未修改的 SVM 實現類似的結果。
> 該方法適用于標準支持向量機(SVM)并利用定點算法來降低計算成本。與傳統 SVM 的比較表明,計算成本方面有顯著改善,同時保持了相似的精度[...]
- [智能手機上的人類活動識別使用多類硬件友好支持向量機](https://link.springer.com/chapter/10.1007/978-3-642-35395-6_30),2012。
現在我們已經熟悉了預測問題,我們將看看加載和探索這個數據集。
## 3.下載數據集
該數據集是免費提供的,可以從 UCI 機器學習庫下載。
數據以單個 zip 文件的形式提供,大小約為 58 兆字節。此下載的直接鏈接如下:
* [UCI HAR Dataset.zip](https://archive.ics.uci.edu/ml/machine-learning-databases/00240/UCI%20HAR%20Dataset.zip)
下載數據集并將所有文件解壓縮到當前工作目錄中名為“ _HARDataset_ ”的新目錄中。
檢查解壓縮的內容,您會注意到以下幾點:
* 存在“ _train_ ”和“ _test_ ”文件夾,其包含用于建模的數據的分割部分(例如,70%/ 30%)。
* 有一個“ _README.txt_ ”文件,其中包含數據集的詳細技術說明和解壓縮文件的內容。
* 有一個“ _features.txt_ ”文件,其中包含工程特性的技術說明。
“ _train_ ”和“ _test_ ”文件夾的內容類似(例如文件夾和文件名),盡管它們包含的特定數據存在差異。
檢查“train”文件夾顯示了一些重要元素:
* 包含預處理數據的“ _Inertial Signals_ ”文件夾。
* “ _X_train.txt_ ”文件,包含用于擬合模型的工程特征。
* “ _y_train.txt_ ”包含每個觀察的類標簽(1-6)。
* “ _subject_train.txt_ ”文件,其中包含數據文件中每一行的映射及其主題標識符(1-30)。
每個文件中的行數匹配,表示每行是每個數據文件中的一個記錄。
“ _Inertial Signals_ ”目錄包含 9 個文件。
* _x,y 和 z 軸的重力加速度 _ 數據文件: _total_acc_x_train.txt_ , _total_acc_y_train.txt_ , _total_acc_z_train.txt_ 。
* _x,y 和 z 軸的身體加速度 _ 數據文件: _body_acc_x_train.txt_ , _body_acc_y_train.txt_ ,body_acc_z_train.txt。
* _x,y 和 z 軸的體陀螺 _ 數據文件: _body_gyro_x_train.txt_ , _body_gyro_y_train.txt_ , _body_gyro_z_train.txt_ 。
該結構在“ _test_ ”目錄中進行鏡像。
我們將把注意力集中在“_ 慣性信號 _”中的數據,因為這是開發可以學習合適表示的機器學習模型中最有趣的,而不是使用特定于域的特征工程。
檢查數據文件顯示列由空格分隔,值顯示為縮放到-1,1。此縮放可以通過數據集隨附的 _README.txt_ 文件中的注釋確認。
現在我們知道了我們擁有的數據,我們可以弄清楚如何將其加載到內存中。
## 4.加載數據
在本節中,我們將開發一些代碼來將數據集加載到內存中。
首先,我們需要加載一個文件。
我們可以使用 [read_csv()Pandas 函數](http://pandas.pydata.org/pandas-docs/stable/generated/pandas.read_csv.html)來加載單個數據文件,并指定該文件沒有標題并使用空格分隔列。
```py
dataframe = read_csv(filepath, header=None, delim_whitespace=True)
```
我們可以將它包裝在名為 _load_file()_ 的函數中。下面列出了此功能的完整示例。
```py
# load dataset
from pandas import read_csv
# load a single file as a numpy array
def load_file(filepath):
dataframe = read_csv(filepath, header=None, delim_whitespace=True)
return dataframe.values
data = load_file('HARDataset/train/Inertial Signals/total_acc_y_train.txt')
print(data.shape)
```
運行該示例加載文件' _total_acc_y_train.txt_ ',返回 NumPy 數組,并打印數組的形狀。
我們可以看到訓練數據由 7,352 行或數據窗口組成,其中每個窗口有 128 個觀察值。
```py
(7352, 128)
```
接下來,將一組文件(例如所有身體加速度數據文件)作為單個組加載將是有用的。
理想情況下,在處理多變量時間序列數據時,以下列格式構建數據非常有用:
```py
[samples, timesteps, features]
```
這有助于分析,并且是對諸如卷積神經網絡和循環神經網絡的深度學習模型的期望。
我們可以通過多次調用上面的 _load_file()_ 函數來實現這一點,對于組中的每個文件一次。
一旦我們將每個文件作為 NumPy 數組加載,我們就可以將所有三個數組組合或堆疊在一起。我們可以使用 [dstack()NumPy 函數](https://www.numpy.org/devdocs/reference/generated/numpy.dstack.html)來確保每個數組的堆疊方式使得要素在第三維中分離,正如我們所希望的那樣。
函數 _load_group()_ 對文件名列表實現此行為,如下所示。
```py
# load a list of files, such as x, y, z data for a given variable
def load_group(filenames, prefix=''):
loaded = list()
for name in filenames:
data = load_file(prefix + name)
loaded.append(data)
# stack group so that features are the 3rd dimension
loaded = dstack(loaded)
return loaded
```
我們可以通過加載所有總加速文件來演示此功能。
下面列出了完整的示例。
```py
# load dataset
from numpy import dstack
from pandas import read_csv
# load a single file as a numpy array
def load_file(filepath):
dataframe = read_csv(filepath, header=None, delim_whitespace=True)
return dataframe.values
# load a list of files, such as x, y, z data for a given variable
def load_group(filenames, prefix=''):
loaded = list()
for name in filenames:
data = load_file(prefix + name)
loaded.append(data)
# stack group so that features are the 3rd dimension
loaded = dstack(loaded)
return loaded
# load the total acc data
filenames = ['total_acc_x_train.txt', 'total_acc_y_train.txt', 'total_acc_z_train.txt']
total_acc = load_group(filenames, prefix='HARDataset/train/Inertial Signals/')
print(total_acc.shape)
```
運行該示例將打印返回的 NumPy 數組的形狀,顯示數據集的三個要素 x,y 和 z 的預期樣本數和時間步長。
```py
(7352, 128, 3)
```
最后,我們可以使用到目前為止開發的兩個函數來加載訓練和測試數據集的所有數據。
給定訓練和測試文件夾中的并行結構,我們可以開發一個新函數來加載給定文件夾的所有輸入和輸出數據。該函數可以構建要加載的所有 9 個數據文件的列表,將它們作為一個具有 9 個特征的 NumPy 數組加載,然后加載包含輸出類的數據文件。
下面的 _load_dataset()_ 函數實現了這種行為。它可以被稱為“ _train_ ”組或“ _test_ ”組,作為字符串參數傳遞。
```py
# load a dataset group, such as train or test
def load_dataset(group, prefix=''):
filepath = prefix + group + '/Inertial Signals/'
# load all 9 files as a single array
filenames = list()
# total acceleration
filenames += ['total_acc_x_'+group+'.txt', 'total_acc_y_'+group+'.txt', 'total_acc_z_'+group+'.txt']
# body acceleration
filenames += ['body_acc_x_'+group+'.txt', 'body_acc_y_'+group+'.txt', 'body_acc_z_'+group+'.txt']
# body gyroscope
filenames += ['body_gyro_x_'+group+'.txt', 'body_gyro_y_'+group+'.txt', 'body_gyro_z_'+group+'.txt']
# load input data
X = load_group(filenames, filepath)
# load class output
y = load_file(prefix + group + '/y_'+group+'.txt')
return X, y
```
下面列出了完整的示例。
```py
# load dataset
from numpy import dstack
from pandas import read_csv
# load a single file as a numpy array
def load_file(filepath):
dataframe = read_csv(filepath, header=None, delim_whitespace=True)
return dataframe.values
# load a list of files, such as x, y, z data for a given variable
def load_group(filenames, prefix=''):
loaded = list()
for name in filenames:
data = load_file(prefix + name)
loaded.append(data)
# stack group so that features are the 3rd dimension
loaded = dstack(loaded)
return loaded
# load a dataset group, such as train or test
def load_dataset(group, prefix=''):
filepath = prefix + group + '/Inertial Signals/'
# load all 9 files as a single array
filenames = list()
# total acceleration
filenames += ['total_acc_x_'+group+'.txt', 'total_acc_y_'+group+'.txt', 'total_acc_z_'+group+'.txt']
# body acceleration
filenames += ['body_acc_x_'+group+'.txt', 'body_acc_y_'+group+'.txt', 'body_acc_z_'+group+'.txt']
# body gyroscope
filenames += ['body_gyro_x_'+group+'.txt', 'body_gyro_y_'+group+'.txt', 'body_gyro_z_'+group+'.txt']
# load input data
X = load_group(filenames, filepath)
# load class output
y = load_file(prefix + group + '/y_'+group+'.txt')
return X, y
# load all train
trainX, trainy = load_dataset('train', 'HARDataset/')
print(trainX.shape, trainy.shape)
# load all test
testX, testy = load_dataset('test', 'HARDataset/')
print(testX.shape, testy.shape)
```
運行該示例將加載訓練和測試數據集。
我們可以看到測試數據集有 2,947 行窗口數據。正如預期的那樣,我們可以看到訓練和測試裝置中的窗口大小匹配,并且每個訓練和測試用例中的輸出(y)大小與樣本數量相匹配。
```py
(7352, 128, 9) (7352, 1)
(2947, 128, 9) (2947, 1)
```
既然我們知道如何加載數據,我們就可以開始探索它了。
## 5.活動類平衡
對數據進行良好的首次檢查是調查每項活動的平衡。
我們相信,30 個科目中的每一個都進行了六項活動。
確認此期望將檢查數據是否確實平衡,使模型更容易,并確認我們正確加載和解釋數據集。
我們可以開發一個函數來總結輸出變量的細分,例如: y 變量。
下面的函數 _class_breakdown()_ 實現了這種行為,首先將提供的 NumPy 數組包裝在 DataFrame 中,按類值對行進行分組,并計算每個組的大小(行數)。然后總結結果,包括計數和百分比。
```py
# summarize the balance of classes in an output variable column
def class_breakdown(data):
# convert the numpy array into a dataframe
df = DataFrame(data)
# group data by the class value and calculate the number of rows
counts = df.groupby(0).size()
# retrieve raw rows
counts = counts.values
# summarize
for i in range(len(counts)):
percent = counts[i] / len(df) * 100
print('Class=%d, total=%d, percentage=%.3f' % (i+1, counts[i], percent))
```
總結訓練和測試數據集中類的細分以確保它們具有類似的細分可能是有用的,然后將結果與組合數據集的細分進行比較。
下面列出了完整的示例。
```py
# summarize class balance
from numpy import array
from numpy import vstack
from pandas import read_csv
from pandas import DataFrame
# load a single file as a numpy array
def load_file(filepath):
dataframe = read_csv(filepath, header=None, delim_whitespace=True)
return dataframe.values
# summarize the balance of classes in an output variable column
def class_breakdown(data):
# convert the numpy array into a dataframe
df = DataFrame(data)
# group data by the class value and calculate the number of rows
counts = df.groupby(0).size()
# retrieve raw rows
counts = counts.values
# summarize
for i in range(len(counts)):
percent = counts[i] / len(df) * 100
print('Class=%d, total=%d, percentage=%.3f' % (i+1, counts[i], percent))
# load train file
trainy = load_file('HARDataset/train/y_train.txt')
# summarize class breakdown
print('Train Dataset')
class_breakdown(trainy)
# load test file
testy = load_file('HARDataset/test/y_test.txt')
# summarize class breakdown
print('Test Dataset')
class_breakdown(testy)
# summarize combined class breakdown
print('Both')
combined = vstack((trainy, testy))
class_breakdown(combined)
```
首先運行該示例總結了訓練集的細分。我們可以看到每個類的非常相似的分布在數據集的 13%到 19%之間徘徊。
測試集和兩個數據集上的結果看起來非常相似。
使用數據集可能是安全的,假設每個訓練和測試集以及每個主題可以平衡類的分布。
```py
Train Dataset
Class=1, total=1226, percentage=16.676
Class=2, total=1073, percentage=14.595
Class=3, total=986, percentage=13.411
Class=4, total=1286, percentage=17.492
Class=5, total=1374, percentage=18.689
Class=6, total=1407, percentage=19.138
Test Dataset
Class=1, total=496, percentage=16.831
Class=2, total=471, percentage=15.982
Class=3, total=420, percentage=14.252
Class=4, total=491, percentage=16.661
Class=5, total=532, percentage=18.052
Class=6, total=537, percentage=18.222
Both
Class=1, total=1722, percentage=16.720
Class=2, total=1544, percentage=14.992
Class=3, total=1406, percentage=13.652
Class=4, total=1777, percentage=17.254
Class=5, total=1906, percentage=18.507
Class=6, total=1944, percentage=18.876
```
## 6.繪制一個主題的時間序列數據
我們正在處理時間序列數據,因此導入檢查是創建原始數據的線圖。
原始數據由每個變量的時間序列數據窗口組成,窗口確實有 50%的重疊。這表明我們可能會在觀察中看到一些重復作為線圖,除非重疊被刪除。
我們可以從使用上面開發的函數加載訓練數據集開始。
```py
# load data
trainX, trainy = load_dataset('train', 'HARDataset/')
```
接下來,我們可以在' _train_ '目錄中加載' _subject_train.txt_ ',該目錄提供行到它所屬主題的映射。
我們可以使用 _load_file()_ 函數加載這個文件。加載后,我們還可以使用 _unique()_ NumPy 函數來檢索訓練數據集中的唯一主題列表。
```py
sub_map = load_file('HARDataset/train/subject_train.txt')
train_subjects = unique(sub_map)
print(train_subjects)
```
接下來,我們需要一種方法來檢索單個主題的所有行,例如科目編號 1。
我們可以通過查找屬于給定主題的所有行號并使用這些行號從訓練數據集中加載的 X 和 y 數據中選擇樣本來完成此操作。
下面的 _data_for_subject()_ 函數實現了這種行為。它將獲取加載的訓練數據,行號到主題的加載映射,以及我們感興趣的主題的主題標識號,并將返回 _X_ 和 _y_ 僅針對該主題的數據。
```py
# get all data for one subject
def data_for_subject(X, y, sub_map, sub_id):
# get row indexes for the subject id
ix = [i for i in range(len(sub_map)) if sub_map[i]==sub_id]
# return the selected samples
return X[ix, :, :], y[ix]
```
現在我們有一個主題的數據,我們可以繪制它。
數據由具有重疊的窗口組成。我們可以編寫一個函數來消除這種重疊,并將窗口向下擠壓給定變量,將其壓縮成一個可以直接繪制為線圖的長序列。
下面的 _to_series()_ 函數對給定變量實現此行為,例如窗戶陣列。
```py
# convert a series of windows to a 1D list
def to_series(windows):
series = list()
for window in windows:
# remove the overlap from the window
half = int(len(window) / 2) - 1
for value in window[-half:]:
series.append(value)
return series
```
最后,我們有足夠的情節來繪制數據。我們可以依次繪制主題的九個變量中的每一個,以及活動水平的最終圖。
每個系列將具有相同數量的時間步長(x 軸的長度),因此,為每個變量創建一個子圖并垂直對齊所有圖可能很有用,這樣我們就可以比較每個變量的運動。
下面的 _plot_subject()_ 函數為單個主題的 _X_ 和 _y_ 數據實現此行為。該函數采用與 _load_dataset()_ 函數中加載的變量(第 3 軸)相同的順序。每個情節都會添加粗略的標題,因此我們不會輕易混淆我們正在看的內容。
```py
# plot the data for one subject
def plot_subject(X, y):
pyplot.figure()
# determine the total number of plots
n, off = X.shape[2] + 1, 0
# plot total acc
for i in range(3):
pyplot.subplot(n, 1, off+1)
pyplot.plot(to_series(X[:, :, off]))
pyplot.title('total acc '+str(i), y=0, loc='left')
off += 1
# plot body acc
for i in range(3):
pyplot.subplot(n, 1, off+1)
pyplot.plot(to_series(X[:, :, off]))
pyplot.title('body acc '+str(i), y=0, loc='left')
off += 1
# plot body gyro
for i in range(3):
pyplot.subplot(n, 1, off+1)
pyplot.plot(to_series(X[:, :, off]))
pyplot.title('body gyro '+str(i), y=0, loc='left')
off += 1
# plot activities
pyplot.subplot(n, 1, n)
pyplot.plot(y)
pyplot.title('activity', y=0, loc='left')
pyplot.show()
```
下面列出了完整的示例。
```py
# plot all vars for one subject
from numpy import array
from numpy import dstack
from numpy import unique
from pandas import read_csv
from matplotlib import pyplot
# load a single file as a numpy array
def load_file(filepath):
dataframe = read_csv(filepath, header=None, delim_whitespace=True)
return dataframe.values
# load a list of files, such as x, y, z data for a given variable
def load_group(filenames, prefix=''):
loaded = list()
for name in filenames:
data = load_file(prefix + name)
loaded.append(data)
# stack group so that features are the 3rd dimension
loaded = dstack(loaded)
return loaded
# load a dataset group, such as train or test
def load_dataset(group, prefix=''):
filepath = prefix + group + '/Inertial Signals/'
# load all 9 files as a single array
filenames = list()
# total acceleration
filenames += ['total_acc_x_'+group+'.txt', 'total_acc_y_'+group+'.txt', 'total_acc_z_'+group+'.txt']
# body acceleration
filenames += ['body_acc_x_'+group+'.txt', 'body_acc_y_'+group+'.txt', 'body_acc_z_'+group+'.txt']
# body gyroscope
filenames += ['body_gyro_x_'+group+'.txt', 'body_gyro_y_'+group+'.txt', 'body_gyro_z_'+group+'.txt']
# load input data
X = load_group(filenames, filepath)
# load class output
y = load_file(prefix + group + '/y_'+group+'.txt')
return X, y
# get all data for one subject
def data_for_subject(X, y, sub_map, sub_id):
# get row indexes for the subject id
ix = [i for i in range(len(sub_map)) if sub_map[i]==sub_id]
# return the selected samples
return X[ix, :, :], y[ix]
# convert a series of windows to a 1D list
def to_series(windows):
series = list()
for window in windows:
# remove the overlap from the window
half = int(len(window) / 2) - 1
for value in window[-half:]:
series.append(value)
return series
# plot the data for one subject
def plot_subject(X, y):
pyplot.figure()
# determine the total number of plots
n, off = X.shape[2] + 1, 0
# plot total acc
for i in range(3):
pyplot.subplot(n, 1, off+1)
pyplot.plot(to_series(X[:, :, off]))
pyplot.title('total acc '+str(i), y=0, loc='left')
off += 1
# plot body acc
for i in range(3):
pyplot.subplot(n, 1, off+1)
pyplot.plot(to_series(X[:, :, off]))
pyplot.title('body acc '+str(i), y=0, loc='left')
off += 1
# plot body gyro
for i in range(3):
pyplot.subplot(n, 1, off+1)
pyplot.plot(to_series(X[:, :, off]))
pyplot.title('body gyro '+str(i), y=0, loc='left')
off += 1
# plot activities
pyplot.subplot(n, 1, n)
pyplot.plot(y)
pyplot.title('activity', y=0, loc='left')
pyplot.show()
# load data
trainX, trainy = load_dataset('train', 'HARDataset/')
# load mapping of rows to subjects
sub_map = load_file('HARDataset/train/subject_train.txt')
train_subjects = unique(sub_map)
print(train_subjects)
# get the data for one subject
sub_id = train_subjects[0]
subX, suby = data_for_subject(trainX, trainy, sub_map, sub_id)
print(subX.shape, suby.shape)
# plot data for subject
plot_subject(subX, suby)
```
運行該示例將打印訓練數據集中的唯一主題,第一個主題的數據樣本,并創建一個包含 10 個圖的圖形,每個圖形對應九個輸入變量和輸出類別。
```py
[ 1 3 5 6 7 8 11 14 15 16 17 19 21 22 23 25 26 27 28 29 30]
(341, 128, 9) (341, 1)
```
在圖中,我們可以看到與活動 1,2 和 3 相對應的大運動周期:步行活動。對于編號較高的活動,4,5 和 6(坐,站立和鋪設),我們還可以看到更少的活動(即相對直線)。
這是我們正確加載解釋原始數據集的確認。
我們可以看到這個主題已經執行了兩次相同的一般活動順序,并且一些活動執行了兩次以上。這表明,對于特定主題,我們不應假設可能已執行的活動或其順序。
我們還可以看到一些固定活動的相對較大的運動,例如鋪設。這些可能是異常值或與活動轉換相關。可以將這些觀察結果平滑或移除為異常值。
最后,我們在九個變量中看到了很多共性。很可能只需要這些跡線的一部分來開發預測模型。

單個主題的所有變量的線圖
我們可以通過做一個小的改動來重新運行另一個主題的例子,例如:選擇訓練數據集中第二個主題的標識符。
```py
# get the data for one subject
sub_id = train_subjects[1]
```
第二個主題的情節顯示出類似的行為,沒有任何意外。
活動的雙重序列確實比第一個主題更加規律。

第二個單個主題的所有變量的線圖
## 7.繪制每個受試者的直方圖
由于問題是框架,我們有興趣使用一些科目的運動數據來預測其他科目的運動活動。
這表明跨學科的運動數據必須有規律性。我們知道數據已經在-1 和 1 之間縮放,可能是每個受試者,這表明檢測到的運動的幅度將是相似的。
我們還期望運動數據的分布在不同主題之間是相似的,因為它們執行相同的動作。
我們可以通過繪制和比較受試者的運動數據的直方圖來檢查這一點。一種有用的方法是為每個受試者創建一個圖并繪制給定數據的所有三個軸(例如總加速度),然后對多個受試者重復此操作。可以修改繪圖以使用相同的軸并水平對齊,以便可以比較跨主題的每個變量的分布。
下面的 _plot_subject_histograms()_ 函數實現了這種行為。該函數采用加載的數據集和行到主題的映射以及要繪制的最大主題數,默認情況下固定為 10。
為每個主題創建一個繪圖,并將一個數據類型的三個變量繪制為具有 100 個二進制位的直方圖,以幫助使分布明顯。每個圖共享相同的軸,該軸固定在-1 和 1 的邊界。
```py
# plot histograms for multiple subjects
def plot_subject_histograms(X, y, sub_map, n=10):
pyplot.figure()
# get unique subjects
subject_ids = unique(sub_map[:,0])
# enumerate subjects
xaxis = None
for k in range(n):
sub_id = subject_ids[k]
# get data for one subject
subX, _ = data_for_subject(X, y, sub_map, sub_id)
# total acc
for i in range(3):
ax = pyplot.subplot(n, 1, k+1, sharex=xaxis)
ax.set_xlim(-1,1)
if k == 0:
xaxis = ax
pyplot.hist(to_series(subX[:,:,i]), bins=100)
pyplot.show()
```
下面列出了完整的示例。
```py
# plot histograms for multiple subjects
from numpy import array
from numpy import unique
from numpy import dstack
from pandas import read_csv
from matplotlib import pyplot
# load a single file as a numpy array
def load_file(filepath):
dataframe = read_csv(filepath, header=None, delim_whitespace=True)
return dataframe.values
# load a list of files, such as x, y, z data for a given variable
def load_group(filenames, prefix=''):
loaded = list()
for name in filenames:
data = load_file(prefix + name)
loaded.append(data)
# stack group so that features are the 3rd dimension
loaded = dstack(loaded)
return loaded
# load a dataset group, such as train or test
def load_dataset(group, prefix=''):
filepath = prefix + group + '/Inertial Signals/'
# load all 9 files as a single array
filenames = list()
# total acceleration
filenames += ['total_acc_x_'+group+'.txt', 'total_acc_y_'+group+'.txt', 'total_acc_z_'+group+'.txt']
# body acceleration
filenames += ['body_acc_x_'+group+'.txt', 'body_acc_y_'+group+'.txt', 'body_acc_z_'+group+'.txt']
# body gyroscope
filenames += ['body_gyro_x_'+group+'.txt', 'body_gyro_y_'+group+'.txt', 'body_gyro_z_'+group+'.txt']
# load input data
X = load_group(filenames, filepath)
# load class output
y = load_file(prefix + group + '/y_'+group+'.txt')
return X, y
# get all data for one subject
def data_for_subject(X, y, sub_map, sub_id):
# get row indexes for the subject id
ix = [i for i in range(len(sub_map)) if sub_map[i]==sub_id]
# return the selected samples
return X[ix, :, :], y[ix]
# convert a series of windows to a 1D list
def to_series(windows):
series = list()
for window in windows:
# remove the overlap from the window
half = int(len(window) / 2) - 1
for value in window[-half:]:
series.append(value)
return series
# plot histograms for multiple subjects
def plot_subject_histograms(X, y, sub_map, n=10):
pyplot.figure()
# get unique subjects
subject_ids = unique(sub_map[:,0])
# enumerate subjects
xaxis = None
for k in range(n):
sub_id = subject_ids[k]
# get data for one subject
subX, _ = data_for_subject(X, y, sub_map, sub_id)
# total acc
for i in range(3):
ax = pyplot.subplot(n, 1, k+1, sharex=xaxis)
ax.set_xlim(-1,1)
if k == 0:
xaxis = ax
pyplot.hist(to_series(subX[:,:,i]), bins=100)
pyplot.show()
# load training dataset
X, y = load_dataset('train', 'HARDataset/')
# load mapping of rows to subjects
sub_map = load_file('HARDataset/train/subject_train.txt')
# plot histograms for subjects
plot_subject_histograms(X, y, sub_map)
```
運行該示例將創建一個包含 10 個繪圖的單個圖形,其中包含總加速度數據的三個軸的直方圖。
給定圖上的三個軸中的每一個具有不同的顏色,具體地,x,y 和 z 分別是藍色,橙色和綠色。
我們可以看到給定軸的分布確實看起來是高斯分布的,具有大的獨立數據組。
我們可以看到一些分布對齊(例如,中間的主要組大約為 0.0),這表明對象之間的運動數據可能存在一些連續性,至少對于這些數據而言。

10 個受試者的總加速度數據的直方圖
我們可以更新 _plot_subject_histograms()_ 函數,接下來繪制身體加速度的分布。更新的功能如下所示。
```py
# plot histograms for multiple subjects
def plot_subject_histograms(X, y, sub_map, n=10):
pyplot.figure()
# get unique subjects
subject_ids = unique(sub_map[:,0])
# enumerate subjects
xaxis = None
for k in range(n):
sub_id = subject_ids[k]
# get data for one subject
subX, _ = data_for_subject(X, y, sub_map, sub_id)
# body acc
for i in range(3):
ax = pyplot.subplot(n, 1, k+1, sharex=xaxis)
ax.set_xlim(-1,1)
if k == 0:
xaxis = ax
pyplot.hist(to_series(subX[:,:,3+i]), bins=100)
pyplot.show()
```
運行更新的示例會創建具有非常不同結果的相同圖表。
在這里,我們可以看到所有數據聚集在一個主題內和主題之間的軸上。這表明數據可能是中心的(零均值)。跨受試者的這種強一致性可能有助于建模,并且可能表明總加速度數據中受試者之間的差異可能不那么有用。

10 名受試者的身體加速度數據的直方圖
最后,我們可以為陀螺儀數據生成一個最終圖。
更新的功能如下所示。
```py
# plot histograms for multiple subjects
def plot_subject_histograms(X, y, sub_map, n=10):
pyplot.figure()
# get unique subjects
subject_ids = unique(sub_map[:,0])
# enumerate subjects
xaxis = None
for k in range(n):
sub_id = subject_ids[k]
# get data for one subject
subX, _ = data_for_subject(X, y, sub_map, sub_id)
# body acc
for i in range(3):
ax = pyplot.subplot(n, 1, k+1, sharex=xaxis)
ax.set_xlim(-1,1)
if k == 0:
xaxis = ax
pyplot.hist(to_series(subX[:,:,6+i]), bins=100)
pyplot.show()
```
運行該示例顯示與身體加速度數據非常相似的結果。
我們看到每個軸上的每個軸的高斯分布的可能性很高,以 0.0 為中心。分布更寬一些,顯示更加豐富的尾巴,但這對于跨主題的運動數據建模是一個令人鼓舞的發現。

10 名受試者的身體陀螺儀數據的直方圖
## 8.繪制每個活動的直方圖
我們有興趣根據活動數據區分活動。
最簡單的情況是區分單個主題的活動。調查此問題的一種方法是按活動審查主題的移動數據分布。我們希望看到單個主題的不同活動的運動數據之間的分布存在一些差異。
我們可以通過創建每個活動的直方圖來檢查這一點,每個圖上給定數據類型的三個軸。同樣,可以水平排列圖以比較每個數據軸的活動分布。我們希望看到各地活動的分布存在差異。
首先,我們必須按活動對主題的跟蹤進行分組。下面的 _data_by_activity()_ 函數實現了這種行為。
```py
# group data by activity
def data_by_activity(X, y, activities):
# group windows by activity
return {a:X[y[:,0]==a, :, :] for a in activities}
```
我們現在可以為給定主題的每個活動創建繪圖。
下面的 _plot_activity_histograms()_ 函數為給定主題的跟蹤數據實現此功能。
首先,按活動對數據進行分組,然后為每個活動創建一個子圖,并將數據類型的每個軸添加為直方圖。該函數僅枚舉數據的前三個特征,即總加速度變量。
```py
# plot histograms for each activity for a subject
def plot_activity_histograms(X, y):
# get a list of unique activities for the subject
activity_ids = unique(y[:,0])
# group windows by activity
grouped = data_by_activity(X, y, activity_ids)
# plot per activity, histograms for each axis
pyplot.figure()
xaxis = None
for k in range(len(activity_ids)):
act_id = activity_ids[k]
# total acceleration
for i in range(3):
ax = pyplot.subplot(len(activity_ids), 1, k+1, sharex=xaxis)
ax.set_xlim(-1,1)
if k == 0:
xaxis = ax
pyplot.hist(to_series(grouped[act_id][:,:,i]), bins=100)
pyplot.title('activity '+str(act_id), y=0, loc='left')
pyplot.show()
```
下面列出了完整的示例。
```py
# plot histograms per activity for a subject
from numpy import array
from numpy import dstack
from numpy import unique
from pandas import read_csv
from matplotlib import pyplot
# load a single file as a numpy array
def load_file(filepath):
dataframe = read_csv(filepath, header=None, delim_whitespace=True)
return dataframe.values
# load a list of files, such as x, y, z data for a given variable
def load_group(filenames, prefix=''):
loaded = list()
for name in filenames:
data = load_file(prefix + name)
loaded.append(data)
# stack group so that features are the 3rd dimension
loaded = dstack(loaded)
return loaded
# load a dataset group, such as train or test
def load_dataset(group, prefix=''):
filepath = prefix + group + '/Inertial Signals/'
# load all 9 files as a single array
filenames = list()
# total acceleration
filenames += ['total_acc_x_'+group+'.txt', 'total_acc_y_'+group+'.txt', 'total_acc_z_'+group+'.txt']
# body acceleration
filenames += ['body_acc_x_'+group+'.txt', 'body_acc_y_'+group+'.txt', 'body_acc_z_'+group+'.txt']
# body gyroscope
filenames += ['body_gyro_x_'+group+'.txt', 'body_gyro_y_'+group+'.txt', 'body_gyro_z_'+group+'.txt']
# load input data
X = load_group(filenames, filepath)
# load class output
y = load_file(prefix + group + '/y_'+group+'.txt')
return X, y
# get all data for one subject
def data_for_subject(X, y, sub_map, sub_id):
# get row indexes for the subject id
ix = [i for i in range(len(sub_map)) if sub_map[i]==sub_id]
# return the selected samples
return X[ix, :, :], y[ix]
# convert a series of windows to a 1D list
def to_series(windows):
series = list()
for window in windows:
# remove the overlap from the window
half = int(len(window) / 2) - 1
for value in window[-half:]:
series.append(value)
return series
# group data by activity
def data_by_activity(X, y, activities):
# group windows by activity
return {a:X[y[:,0]==a, :, :] for a in activities}
# plot histograms for each activity for a subject
def plot_activity_histograms(X, y):
# get a list of unique activities for the subject
activity_ids = unique(y[:,0])
# group windows by activity
grouped = data_by_activity(X, y, activity_ids)
# plot per activity, histograms for each axis
pyplot.figure()
xaxis = None
for k in range(len(activity_ids)):
act_id = activity_ids[k]
# total acceleration
for i in range(3):
ax = pyplot.subplot(len(activity_ids), 1, k+1, sharex=xaxis)
ax.set_xlim(-1,1)
if k == 0:
xaxis = ax
pyplot.hist(to_series(grouped[act_id][:,:,i]), bins=100)
pyplot.title('activity '+str(act_id), y=0, loc='left')
pyplot.show()
# load data
trainX, trainy = load_dataset('train', 'HARDataset/')
# load mapping of rows to subjects
sub_map = load_file('HARDataset/train/subject_train.txt')
train_subjects = unique(sub_map)
# get the data for one subject
sub_id = train_subjects[0]
subX, suby = data_for_subject(trainX, trainy, sub_map, sub_id)
# plot data for subject
plot_activity_histograms(subX, suby)
```
運行該示例將創建包含六個子圖的圖,每個子圖用于訓練數據集中第一個主題的每個活動。總加速度數據的 x,y 和 z 軸中的每一個分別具有藍色,橙色和綠色直方圖。
我們可以看到每個活動都有不同的數據分布,大運動(前三個活動)與固定活動(最后三個活動)之間存在顯著差異。前三個活動的數據分布看起來是高斯的,可能有不同的均值和標準偏差。后一活動的分布看起來是多模態的(即多個峰值)。

按活動計算的總加速度數據的直方圖
我們可以使用 _plot_activity_histograms()_ 的更新版本重新運行相同的示例,該版本將繪制車身加速度數據。
更新的功能如下所示。
```py
# plot histograms for each activity for a subject
def plot_activity_histograms(X, y):
# get a list of unique activities for the subject
activity_ids = unique(y[:,0])
# group windows by activity
grouped = data_by_activity(X, y, activity_ids)
# plot per activity, histograms for each axis
pyplot.figure()
xaxis = None
for k in range(len(activity_ids)):
act_id = activity_ids[k]
# total acceleration
for i in range(3):
ax = pyplot.subplot(len(activity_ids), 1, k+1, sharex=xaxis)
ax.set_xlim(-1,1)
if k == 0:
xaxis = ax
pyplot.hist(to_series(grouped[act_id][:,:,3+i]), bins=100)
pyplot.title('activity '+str(act_id), y=0, loc='left')
pyplot.show()
```
運行更新的示例會創建一個新的圖。
在這里,我們可以看到在動作與靜止活動之間的活動中有更多類似的分布。在動態活動的情況下數據看起來是雙峰的,并且在靜止活動的情況下可能是高斯的或指數的。
我們通過活動看到的總體對體加速度分布的模式反映了我們在上一節中使用相同數據類型看到的對象。也許總加速度數據是區分活動的關鍵。

通過活動的身體加速度數據的直方圖
最后,我們可以再次更新示例以繪制陀螺儀數據的每個活動的直方圖。
更新的功能如下所示。
```py
# plot histograms for each activity for a subject
def plot_activity_histograms(X, y):
# get a list of unique activities for the subject
activity_ids = unique(y[:,0])
# group windows by activity
grouped = data_by_activity(X, y, activity_ids)
# plot per activity, histograms for each axis
pyplot.figure()
xaxis = None
for k in range(len(activity_ids)):
act_id = activity_ids[k]
# total acceleration
for i in range(3):
ax = pyplot.subplot(len(activity_ids), 1, k+1, sharex=xaxis)
ax.set_xlim(-1,1)
if k == 0:
xaxis = ax
pyplot.hist(to_series(grouped[act_id][:,:,6+i]), bins=100)
pyplot.title('activity '+str(act_id), y=0, loc='left')
pyplot.show()
```
運行該示例將創建具有與身體加速度數據類似的模式的繪圖,盡管可能顯示胖尾高斯分布而不是動態活動的雙峰分布。

通過活動的身體陀螺儀數據的直方圖
所有這些圖都是為第一個主題創建的,我們期望在其他主題的活動中看到類似的運動數據分布和關系。
## 9.繪制活動持續時間箱圖
需要考慮的最后一個方面是受試者在每項活動上花費的時間。
這與班級的平衡密切相關。如果活動(類)在數據集中通常是平衡的,那么我們期望特定主題在其跟蹤過程中的活動平衡也將相當平衡。
我們可以通過計算每個主題在每個活動上花費的時間(樣本或行數)并查看每個活動的持續時間分布來確認這一點。
審查這些數據的一種方便方法是將分布總結為箱線圖,顯示中位數(線),中間 50%(方框),數據的一般范圍(四分位數間距)和異常值(以點為單位) 。
下面的函數 _plot_activity_durations_by_subject()_ 通過首先按主題分割數據集,然后按活動分割主題數據并計算在每個活動上花費的行,然后最終創建持續時間測量的每個活動的箱線圖來實現此行為。
```py
# plot activity durations by subject
def plot_activity_durations_by_subject(X, y, sub_map):
# get unique subjects and activities
subject_ids = unique(sub_map[:,0])
activity_ids = unique(y[:,0])
# enumerate subjects
activity_windows = {a:list() for a in activity_ids}
for sub_id in subject_ids:
# get data for one subject
_, subj_y = data_for_subject(X, y, sub_map, sub_id)
# count windows by activity
for a in activity_ids:
activity_windows[a].append(len(subj_y[subj_y[:,0]==a]))
# organize durations into a list of lists
durations = [activity_windows[a] for a in activity_ids]
pyplot.boxplot(durations, labels=activity_ids)
pyplot.show()
```
下面列出了完整的示例。
```py
# plot durations of each activity by subject
from numpy import array
from numpy import dstack
from numpy import unique
from pandas import read_csv
from matplotlib import pyplot
# load a single file as a numpy array
def load_file(filepath):
dataframe = read_csv(filepath, header=None, delim_whitespace=True)
return dataframe.values
# load a list of files, such as x, y, z data for a given variable
def load_group(filenames, prefix=''):
loaded = list()
for name in filenames:
data = load_file(prefix + name)
loaded.append(data)
# stack group so that features are the 3rd dimension
loaded = dstack(loaded)
return loaded
# load a dataset group, such as train or test
def load_dataset(group, prefix=''):
filepath = prefix + group + '/Inertial Signals/'
# load all 9 files as a single array
filenames = list()
# total acceleration
filenames += ['total_acc_x_'+group+'.txt', 'total_acc_y_'+group+'.txt', 'total_acc_z_'+group+'.txt']
# body acceleration
filenames += ['body_acc_x_'+group+'.txt', 'body_acc_y_'+group+'.txt', 'body_acc_z_'+group+'.txt']
# body gyroscope
filenames += ['body_gyro_x_'+group+'.txt', 'body_gyro_y_'+group+'.txt', 'body_gyro_z_'+group+'.txt']
# load input data
X = load_group(filenames, filepath)
# load class output
y = load_file(prefix + group + '/y_'+group+'.txt')
return X, y
# get all data for one subject
def data_for_subject(X, y, sub_map, sub_id):
# get row indexes for the subject id
ix = [i for i in range(len(sub_map)) if sub_map[i]==sub_id]
# return the selected samples
return X[ix, :, :], y[ix]
# convert a series of windows to a 1D list
def to_series(windows):
series = list()
for window in windows:
# remove the overlap from the window
half = int(len(window) / 2) - 1
for value in window[-half:]:
series.append(value)
return series
# group data by activity
def data_by_activity(X, y, activities):
# group windows by activity
return {a:X[y[:,0]==a, :, :] for a in activities}
# plot activity durations by subject
def plot_activity_durations_by_subject(X, y, sub_map):
# get unique subjects and activities
subject_ids = unique(sub_map[:,0])
activity_ids = unique(y[:,0])
# enumerate subjects
activity_windows = {a:list() for a in activity_ids}
for sub_id in subject_ids:
# get data for one subject
_, subj_y = data_for_subject(X, y, sub_map, sub_id)
# count windows by activity
for a in activity_ids:
activity_windows[a].append(len(subj_y[subj_y[:,0]==a]))
# organize durations into a list of lists
durations = [activity_windows[a] for a in activity_ids]
pyplot.boxplot(durations, labels=activity_ids)
pyplot.show()
# load training dataset
X, y = load_dataset('train', 'HARDataset/')
# load mapping of rows to subjects
sub_map = load_file('HARDataset/train/subject_train.txt')
# plot durations
plot_activity_durations_by_subject(X, y, sub_map)
```
運行該示例將創建六個箱形圖,每個活動一個。
每個箱圖總結了訓練數據集中每個活動花費的時間(行數或窗口數)。
我們可以看到,受試者在靜止活動(4,5 和 6)上花費的時間更多,在動作活動中花費的時間更少(1,2 和 3),3 的分布最小,或者時間花費最少。
活動的分布并不大,這表明不需要削減較長時間的活動或過度采樣活動。盡管如果運動活動的預測模型的技能通常更差,這些方法仍然可用。

訓練組上每個受試者的活動持續時間的箱線圖
我們可以使用以下附加行為訓練數據創建類似的箱線圖。
```py
# load test dataset
X, y = load_dataset('test', 'HARDataset/')
# load mapping of rows to subjects
sub_map = load_file('HARDataset/test/subject_test.txt')
# plot durations
plot_activity_durations_by_subject(X, y, sub_map)
```
運行更新的示例顯示了活動之間的類似關系。
這是令人鼓舞的,這表明測試和訓練數據集確實可以合理地代表整個數據集。

測試集上每個受試者的活動持續時間的箱線圖
現在我們已經探索了數據集,我們可以建議一些關于如何建模的想法。
## 10.建模方法
在本節中,我們總結了一些建模活動識別數據集的方法。
這些想法分為項目的主題。
### 問題框架
第一個重要的考慮因素是預測問題的框架。
原始作品中描述的問題的框架是基于已知主體的運動數據和活動,根據運動數據預測新主體的活動。
我們可以總結為:
* 給出一個移動數據窗口預測活動。
這是一個合理而有用的問題框架。
將提供的數據構建為預測問題的其他一些可能方法包括:
* 在給定移動數據的時間步長的情況下預測活動。
* 給出多個移動數據窗口的預測活動。
* 給定多個移動數據窗口的預測活動序列。
* 給出預分段活動的一系列移動數據的預測活動。
* 給定移動數據的時間步長,預測活動停止或轉換。
* 給定移動數據窗口預測靜止或非靜止活動
其中一些框架可能過于具有挑戰性或太容易。
然而,這些框架提供了探索和理解數據集的其他方法。
### 數據準備
在使用原始數據訓練模型之前可能需要一些數據準備。
數據似乎已經縮放到范圍[-1,1]。
在建模之前可以執行的一些其他數據轉換包括:
* 跨學科規范化。
* 每個科目的標準化。
* 跨學科標準化。
* 軸功能選擇。
* 數據類型功能選擇。
* 信號異常檢測和清除。
* 刪除過多代表活動的窗口。
* 對代表性不足的活動進行過采樣。
* 將信號數據下采樣到 1 / 4,1 / 2,1,2 或其他部分。
### 預測建模
通常,問題是時間序列多類分類問題。
正如我們所看到的,它也可以被構造為二元分類問題和多步時間序列分類問題。
最初的論文探討了在數據集版本中使用經典機器學習算法,其中從每個數據窗口設計了特征。具體地說,是一種改進的支持向量機
數據集的特征工程版本上的 SVM 結果可以提供問題表現的基線。
從這一點擴展,在該版本的數據集上評估多個線性,非線性和集合機器學習算法可以提供改進的基準。
問題的焦點可能是數據集的未設計或原始版本。
在這里,可以探索模型復雜性的進展,以確定最合適的問題模型;一些候選模型包括:
* 常見的線性,非線性和集成機器學習算法。
* 多層感知器。
* 卷積神經網絡,特別是 1D CNN。
* 循環神經網絡,特別是 LSTM。
* CNN 和 LSTMS 的雜交體,例如 CNN-LSTM 和 ConvLSTM。
### 模型評估
在原始論文中對模型的評估涉及使用 70%和 30%比率的受試者對數據進行訓練/測試分割。
對這種預先定義的數據分割的探索表明,這兩組都能夠合理地代表整個數據集。
另一種替代方法可以是每個受試者使用留一法交叉驗證或 LOOCV。除了為每個受試者提供用作保留測試集的機會之外,該方法還將提供可以平均和總結的 30 個分數的群體,這可以提供更穩健的結果。
使用分類精度和混淆矩陣表示模型表現,兩者都適用于預測問題的多類性質。
具體而言,混淆矩陣將有助于確定某些類別比其他類別更容易或更具挑戰性,例如靜止活動與涉及運動的活動相比。
## 進一步閱讀
如果您希望深入了解,本節將提供有關該主題的更多資源。
### 文件
* [基于傳感器的活動識別的深度學習:一項調查](https://arxiv.org/abs/1707.03502)。
* [使用智能手機進行人類活動識別的公共領域數據集](https://upcommons.upc.edu/handle/2117/20897),2013 年。
* [智能手機上的人類活動識別使用多類硬件友好支持向量機](https://link.springer.com/chapter/10.1007/978-3-642-35395-6_30),2012。
### API
* [pandas.read_csv API](http://pandas.pydata.org/pandas-docs/stable/generated/pandas.read_csv.html)
* [numpy.dstack API](https://www.numpy.org/devdocs/reference/generated/numpy.dstack.html)
### 用品
* [使用智能手機數據集進行人類活動識別,UCI 機器學習庫](https://archive.ics.uci.edu/ml/datasets/human+activity+recognition+using+smartphones)
* [活動識別,維基百科](https://en.wikipedia.org/wiki/Activity_recognition)
* [使用智能手機傳感器](https://www.youtube.com/watch?v=XOEN9W05_4A),視頻的活動識別實驗。
## 摘要
在本教程中,您發現了使用智能手機數據集進行時間序列分類的活動識別,以及如何加載和瀏覽數據集以使其為預測建模做好準備。
具體來說,你學到了:
* 如何下載數據集并將其加載到內存中。
* 如何使用線圖,直方圖和箱線圖來更好地理解運動數據的結構。
* 如何建模問題包括框架,數據準備,建模和評估。
你有任何問題嗎?
在下面的評論中提出您的問題,我會盡力回答。
- Machine Learning Mastery 應用機器學習教程
- 5競爭機器學習的好處
- 過度擬合的簡單直覺,或者為什么測試訓練數據是一個壞主意
- 特征選擇簡介
- 應用機器學習作為一個搜索問題的溫和介紹
- 為什么應用機器學習很難
- 為什么我的結果不如我想的那么好?你可能過度擬合了
- 用ROC曲線評估和比較分類器表現
- BigML評論:發現本機學習即服務平臺的聰明功能
- BigML教程:開發您的第一個決策樹并進行預測
- 構建生產機器學習基礎設施
- 分類準確性不夠:可以使用更多表現測量
- 一種預測模型的巧妙應用
- 機器學習項目中常見的陷阱
- 數據清理:將凌亂的數據轉換為整潔的數據
- 機器學習中的數據泄漏
- 數據,學習和建模
- 數據管理至關重要以及為什么需要認真對待它
- 將預測模型部署到生產中
- 參數和超參數之間有什么區別?
- 測試和驗證數據集之間有什么區別?
- 發現特征工程,如何設計特征以及如何獲得它
- 如何開始使用Kaggle
- 超越預測
- 如何在評估機器學習算法時選擇正確的測試選項
- 如何定義機器學習問題
- 如何評估機器學習算法
- 如何獲得基線結果及其重要性
- 如何充分利用機器學習數據
- 如何識別數據中的異常值
- 如何提高機器學習效果
- 如何在競爭機器學習中踢屁股
- 如何知道您的機器學習模型是否具有良好的表現
- 如何布局和管理您的機器學習項目
- 如何為機器學習準備數據
- 如何減少最終機器學習模型中的方差
- 如何使用機器學習結果
- 如何解決像數據科學家這樣的問題
- 通過數據預處理提高模型精度
- 處理機器學習的大數據文件的7種方法
- 建立機器學習系統的經驗教訓
- 如何使用機器學習清單可靠地獲得準確的預測(即使您是初學者)
- 機器學習模型運行期間要做什么
- 機器學習表現改進備忘單
- 來自世界級從業者的機器學習技巧:Phil Brierley
- 模型預測精度與機器學習中的解釋
- 競爭機器學習的模型選擇技巧
- 機器學習需要多少訓練數據?
- 如何系統地規劃和運行機器學習實驗
- 應用機器學習過程
- 默認情況下可重現的機器學習結果
- 10個實踐應用機器學習的標準數據集
- 簡單的三步法到最佳機器學習算法
- 打擊機器學習數據集中不平衡類的8種策略
- 模型表現不匹配問題(以及如何處理)
- 黑箱機器學習的誘惑陷阱
- 如何培養最終的機器學習模型
- 使用探索性數據分析了解您的問題并獲得更好的結果
- 什么是數據挖掘和KDD
- 為什么One-Hot在機器學習中編碼數據?
- 為什么你應該在你的機器學習問題上進行抽樣檢查算法
- 所以,你正在研究機器學習問題......
- Machine Learning Mastery Keras 深度學習教程
- Keras 中神經網絡模型的 5 步生命周期
- 在 Python 迷你課程中應用深度學習
- Keras 深度學習庫的二元分類教程
- 如何用 Keras 構建多層感知器神經網絡模型
- 如何在 Keras 中檢查深度學習模型
- 10 個用于 Amazon Web Services 深度學習的命令行秘籍
- 機器學習卷積神經網絡的速成課程
- 如何在 Python 中使用 Keras 進行深度學習的度量
- 深度學習書籍
- 深度學習課程
- 你所知道的深度學習是一種謊言
- 如何設置 Amazon AWS EC2 GPU 以訓練 Keras 深度學習模型(分步)
- 神經網絡中批量和迭代之間的區別是什么?
- 在 Keras 展示深度學習模型訓練歷史
- 基于 Keras 的深度學習模型中的dropout正則化
- 評估 Keras 中深度學習模型的表現
- 如何評價深度學習模型的技巧
- 小批量梯度下降的簡要介紹以及如何配置批量大小
- 在 Keras 中獲得深度學習幫助的 9 種方法
- 如何使用 Keras 在 Python 中網格搜索深度學習模型的超參數
- 用 Keras 在 Python 中使用卷積神經網絡進行手寫數字識別
- 如何用 Keras 進行預測
- 用 Keras 進行深度學習的圖像增強
- 8 個深度學習的鼓舞人心的應用
- Python 深度學習庫 Keras 簡介
- Python 深度學習庫 TensorFlow 簡介
- Python 深度學習庫 Theano 簡介
- 如何使用 Keras 函數式 API 進行深度學習
- Keras 深度學習庫的多類分類教程
- 多層感知器神經網絡速成課程
- 基于卷積神經網絡的 Keras 深度學習庫中的目標識別
- 流行的深度學習庫
- 用深度學習預測電影評論的情感
- Python 中的 Keras 深度學習庫的回歸教程
- 如何使用 Keras 獲得可重現的結果
- 如何在 Linux 服務器上運行深度學習實驗
- 保存并加載您的 Keras 深度學習模型
- 用 Keras 逐步開發 Python 中的第一個神經網絡
- 用 Keras 理解 Python 中的有狀態 LSTM 循環神經網絡
- 在 Python 中使用 Keras 深度學習模型和 Scikit-Learn
- 如何使用預訓練的 VGG 模型對照片中的物體進行分類
- 在 Python 和 Keras 中對深度學習模型使用學習率調度
- 如何在 Keras 中可視化深度學習神經網絡模型
- 什么是深度學習?
- 何時使用 MLP,CNN 和 RNN 神經網絡
- 為什么用隨機權重初始化神經網絡?
- Machine Learning Mastery 深度學習 NLP 教程
- 深度學習在自然語言處理中的 7 個應用
- 如何實現自然語言處理的波束搜索解碼器
- 深度學習文檔分類的最佳實踐
- 關于自然語言處理的熱門書籍
- 在 Python 中計算文本 BLEU 分數的溫和介紹
- 使用編碼器 - 解碼器模型的用于字幕生成的注入和合并架構
- 如何用 Python 清理機器學習的文本
- 如何配置神經機器翻譯的編碼器 - 解碼器模型
- 如何開始深度學習自然語言處理(7 天迷你課程)
- 自然語言處理的數據集
- 如何開發一種深度學習的詞袋模型來預測電影評論情感
- 深度學習字幕生成模型的溫和介紹
- 如何在 Keras 中定義神經機器翻譯的編碼器 - 解碼器序列 - 序列模型
- 如何利用小實驗在 Keras 中開發字幕生成模型
- 如何從頭開發深度學習圖片標題生成器
- 如何在 Keras 中開發基于字符的神經語言模型
- 如何開發用于情感分析的 N-gram 多通道卷積神經網絡
- 如何從零開始開發神經機器翻譯系統
- 如何在 Python 中用 Keras 開發基于單詞的神經語言模型
- 如何開發一種預測電影評論情感的詞嵌入模型
- 如何使用 Gensim 在 Python 中開發詞嵌入
- 用于文本摘要的編碼器 - 解碼器深度學習模型
- Keras 中文本摘要的編碼器 - 解碼器模型
- 用于神經機器翻譯的編碼器 - 解碼器循環神經網絡模型
- 淺談詞袋模型
- 文本摘要的溫和介紹
- 編碼器 - 解碼器循環神經網絡中的注意力如何工作
- 如何利用深度學習自動生成照片的文本描述
- 如何開發一個單詞級神經語言模型并用它來生成文本
- 淺談神經機器翻譯
- 什么是自然語言處理?
- 牛津自然語言處理深度學習課程
- 如何為機器翻譯準備法語到英語的數據集
- 如何為情感分析準備電影評論數據
- 如何為文本摘要準備新聞文章
- 如何準備照片標題數據集以訓練深度學習模型
- 如何使用 Keras 為深度學習準備文本數據
- 如何使用 scikit-learn 為機器學習準備文本數據
- 自然語言處理神經網絡模型入門
- 對自然語言處理的深度學習的承諾
- 在 Python 中用 Keras 進行 LSTM 循環神經網絡的序列分類
- 斯坦福自然語言處理深度學習課程評價
- 統計語言建模和神經語言模型的簡要介紹
- 使用 Keras 在 Python 中進行 LSTM 循環神經網絡的文本生成
- 淺談機器學習中的轉換
- 如何使用 Keras 將詞嵌入層用于深度學習
- 什么是用于文本的詞嵌入
- Machine Learning Mastery 深度學習時間序列教程
- 如何開發人類活動識別的一維卷積神經網絡模型
- 人類活動識別的深度學習模型
- 如何評估人類活動識別的機器學習算法
- 時間序列預測的多層感知器網絡探索性配置
- 比較經典和機器學習方法進行時間序列預測的結果
- 如何通過深度學習快速獲得時間序列預測的結果
- 如何利用 Python 處理序列預測問題中的缺失時間步長
- 如何建立預測大氣污染日的概率預測模型
- 如何開發一種熟練的機器學習時間序列預測模型
- 如何構建家庭用電自回歸預測模型
- 如何開發多步空氣污染時間序列預測的自回歸預測模型
- 如何制定多站點多元空氣污染時間序列預測的基線預測
- 如何開發時間序列預測的卷積神經網絡模型
- 如何開發卷積神經網絡用于多步時間序列預測
- 如何開發單變量時間序列預測的深度學習模型
- 如何開發 LSTM 模型用于家庭用電的多步時間序列預測
- 如何開發 LSTM 模型進行時間序列預測
- 如何開發多元多步空氣污染時間序列預測的機器學習模型
- 如何開發多層感知器模型進行時間序列預測
- 如何開發人類活動識別時間序列分類的 RNN 模型
- 如何開始深度學習的時間序列預測(7 天迷你課程)
- 如何網格搜索深度學習模型進行時間序列預測
- 如何對單變量時間序列預測的網格搜索樸素方法
- 如何在 Python 中搜索 SARIMA 模型超參數用于時間序列預測
- 如何在 Python 中進行時間序列預測的網格搜索三次指數平滑
- 一個標準的人類活動識別問題的溫和介紹
- 如何加載和探索家庭用電數據
- 如何加載,可視化和探索復雜的多變量多步時間序列預測數據集
- 如何從智能手機數據模擬人類活動
- 如何根據環境因素預測房間占用率
- 如何使用腦波預測人眼是開放還是閉合
- 如何在 Python 中擴展長短期內存網絡的數據
- 如何使用 TimeseriesGenerator 進行 Keras 中的時間序列預測
- 基于機器學習算法的室內運動時間序列分類
- 用于時間序列預測的狀態 LSTM 在線學習的不穩定性
- 用于罕見事件時間序列預測的 LSTM 模型體系結構
- 用于時間序列預測的 4 種通用機器學習數據變換
- Python 中長短期記憶網絡的多步時間序列預測
- 家庭用電機器學習的多步時間序列預測
- Keras 中 LSTM 的多變量時間序列預測
- 如何開發和評估樸素的家庭用電量預測方法
- 如何為長短期記憶網絡準備單變量時間序列數據
- 循環神經網絡在時間序列預測中的應用
- 如何在 Python 中使用差異變換刪除趨勢和季節性
- 如何在 LSTM 中種子狀態用于 Python 中的時間序列預測
- 使用 Python 進行時間序列預測的有狀態和無狀態 LSTM
- 長短時記憶網絡在時間序列預測中的適用性
- 時間序列預測問題的分類
- Python 中長短期記憶網絡的時間序列預測
- 基于 Keras 的 Python 中 LSTM 循環神經網絡的時間序列預測
- Keras 中深度學習的時間序列預測
- 如何用 Keras 調整 LSTM 超參數進行時間序列預測
- 如何在時間序列預測訓練期間更新 LSTM 網絡
- 如何使用 LSTM 網絡的 Dropout 進行時間序列預測
- 如何使用 LSTM 網絡中的特征進行時間序列預測
- 如何在 LSTM 網絡中使用時間序列進行時間序列預測
- 如何利用 LSTM 網絡進行權重正則化進行時間序列預測
- Machine Learning Mastery 線性代數教程
- 機器學習數學符號的基礎知識
- 用 NumPy 陣列輕松介紹廣播
- 如何從 Python 中的 Scratch 計算主成分分析(PCA)
- 用于編碼器審查的計算線性代數
- 10 機器學習中的線性代數示例
- 線性代數的溫和介紹
- 用 NumPy 輕松介紹 Python 中的 N 維數組
- 機器學習向量的溫和介紹
- 如何在 Python 中為機器學習索引,切片和重塑 NumPy 數組
- 機器學習的矩陣和矩陣算法簡介
- 溫和地介紹機器學習的特征分解,特征值和特征向量
- NumPy 對預期價值,方差和協方差的簡要介紹
- 機器學習矩陣分解的溫和介紹
- 用 NumPy 輕松介紹機器學習的張量
- 用于機器學習的線性代數中的矩陣類型簡介
- 用于機器學習的線性代數備忘單
- 線性代數的深度學習
- 用于機器學習的線性代數(7 天迷你課程)
- 機器學習的線性代數
- 機器學習矩陣運算的溫和介紹
- 線性代數評論沒有廢話指南
- 學習機器學習線性代數的主要資源
- 淺談機器學習的奇異值分解
- 如何用線性代數求解線性回歸
- 用于機器學習的稀疏矩陣的溫和介紹
- 機器學習中向量規范的溫和介紹
- 學習線性代數用于機器學習的 5 個理由
- Machine Learning Mastery LSTM 教程
- Keras中長短期記憶模型的5步生命周期
- 長短時記憶循環神經網絡的注意事項
- CNN長短期記憶網絡
- 逆向神經網絡中的深度學習速成課程
- 可變長度輸入序列的數據準備
- 如何用Keras開發用于Python序列分類的雙向LSTM
- 如何開發Keras序列到序列預測的編碼器 - 解碼器模型
- 如何診斷LSTM模型的過度擬合和欠擬合
- 如何開發一種編碼器 - 解碼器模型,注重Keras中的序列到序列預測
- 編碼器 - 解碼器長短期存儲器網絡
- 神經網絡中爆炸梯度的溫和介紹
- 對時間反向傳播的溫和介紹
- 生成長短期記憶網絡的溫和介紹
- 專家對長短期記憶網絡的簡要介紹
- 在序列預測問題上充分利用LSTM
- 編輯器 - 解碼器循環神經網絡全局注意的溫和介紹
- 如何利用長短時記憶循環神經網絡處理很長的序列
- 如何在Python中對一個熱編碼序列數據
- 如何使用編碼器 - 解碼器LSTM來回顯隨機整數序列
- 具有注意力的編碼器 - 解碼器RNN體系結構的實現模式
- 學習使用編碼器解碼器LSTM循環神經網絡添加數字
- 如何學習長短時記憶循環神經網絡回聲隨機整數
- 具有Keras的長短期記憶循環神經網絡的迷你課程
- LSTM自動編碼器的溫和介紹
- 如何用Keras中的長短期記憶模型進行預測
- 用Python中的長短期內存網絡演示內存
- 基于循環神經網絡的序列預測模型的簡要介紹
- 深度學習的循環神經網絡算法之旅
- 如何重塑Keras中長短期存儲網絡的輸入數據
- 了解Keras中LSTM的返回序列和返回狀態之間的差異
- RNN展開的溫和介紹
- 5學習LSTM循環神經網絡的簡單序列預測問題的例子
- 使用序列進行預測
- 堆疊長短期內存網絡
- 什么是教師強制循環神經網絡?
- 如何在Python中使用TimeDistributed Layer for Long Short-Term Memory Networks
- 如何準備Keras中截斷反向傳播的序列預測
- 如何在使用LSTM進行訓練和預測時使用不同的批量大小
- Machine Learning Mastery 機器學習算法教程
- 機器學習算法之旅
- 用于機器學習的裝袋和隨機森林集合算法
- 從頭開始實施機器學習算法的好處
- 更好的樸素貝葉斯:從樸素貝葉斯算法中獲取最多的12個技巧
- 機器學習的提升和AdaBoost
- 選擇機器學習算法:Microsoft Azure的經驗教訓
- 機器學習的分類和回歸樹
- 什么是機器學習中的混淆矩陣
- 如何使用Python從頭開始創建算法測試工具
- 通過創建機器學習算法的目標列表來控制
- 從頭開始停止編碼機器學習算法
- 在實現機器學習算法時,不要從開源代碼開始
- 不要使用隨機猜測作為基線分類器
- 淺談機器學習中的概念漂移
- 溫和介紹機器學習中的偏差 - 方差權衡
- 機器學習的梯度下降
- 機器學習算法如何工作(他們學習輸入到輸出的映射)
- 如何建立機器學習算法的直覺
- 如何實現機器學習算法
- 如何研究機器學習算法行為
- 如何學習機器學習算法
- 如何研究機器學習算法
- 如何研究機器學習算法
- 如何在Python中從頭開始實現反向傳播算法
- 如何用Python從頭開始實現Bagging
- 如何用Python從頭開始實現基線機器學習算法
- 如何在Python中從頭開始實現決策樹算法
- 如何用Python從頭開始實現學習向量量化
- 如何利用Python從頭開始隨機梯度下降實現線性回歸
- 如何利用Python從頭開始隨機梯度下降實現Logistic回歸
- 如何用Python從頭開始實現機器學習算法表現指標
- 如何在Python中從頭開始實現感知器算法
- 如何在Python中從零開始實現隨機森林
- 如何在Python中從頭開始實現重采樣方法
- 如何用Python從頭開始實現簡單線性回歸
- 如何用Python從頭開始實現堆棧泛化(Stacking)
- K-Nearest Neighbors for Machine Learning
- 學習機器學習的向量量化
- 機器學習的線性判別分析
- 機器學習的線性回歸
- 使用梯度下降進行機器學習的線性回歸教程
- 如何在Python中從頭開始加載機器學習數據
- 機器學習的Logistic回歸
- 機器學習的Logistic回歸教程
- 機器學習算法迷你課程
- 如何在Python中從頭開始實現樸素貝葉斯
- 樸素貝葉斯機器學習
- 樸素貝葉斯機器學習教程
- 機器學習算法的過擬合和欠擬合
- 參數化和非參數機器學習算法
- 理解任何機器學習算法的6個問題
- 在機器學習中擁抱隨機性
- 如何使用Python從頭開始擴展機器學習數據
- 機器學習的簡單線性回歸教程
- 有監督和無監督的機器學習算法
- 用于機器學習的支持向量機
- 在沒有數學背景的情況下理解機器學習算法的5種技術
- 最好的機器學習算法
- 教程從頭開始在Python中實現k-Nearest Neighbors
- 通過從零開始實現它們來理解機器學習算法(以及繞過壞代碼的策略)
- 使用隨機森林:在121個數據集上測試179個分類器
- 為什么從零開始實現機器學習算法
- Machine Learning Mastery 機器學習入門教程
- 機器學習入門的四個步驟:初學者入門與實踐的自上而下策略
- 你應該培養的 5 個機器學習領域
- 一種選擇機器學習算法的數據驅動方法
- 機器學習中的分析與數值解
- 應用機器學習是一種精英政治
- 機器學習的基本概念
- 如何成為數據科學家
- 初學者如何在機器學習中弄錯
- 機器學習的最佳編程語言
- 構建機器學習組合
- 機器學習中分類與回歸的區別
- 評估自己作為數據科學家并利用結果建立驚人的數據科學團隊
- 探索 Kaggle 大師的方法論和心態:對 Diogo Ferreira 的采訪
- 擴展機器學習工具并展示掌握
- 通過尋找地標開始機器學習
- 溫和地介紹預測建模
- 通過提供結果在機器學習中獲得夢想的工作
- 如何開始機器學習:自學藍圖
- 開始并在機器學習方面取得進展
- 應用機器學習的 Hello World
- 初學者如何使用小型項目開始機器學習并在 Kaggle 上進行競爭
- 我如何開始機器學習? (簡短版)
- 我是如何開始機器學習的
- 如何在機器學習中取得更好的成績
- 如何從在銀行工作到擔任 Target 的高級數據科學家
- 如何學習任何機器學習工具
- 使用小型目標項目深入了解機器學習工具
- 獲得付費申請機器學習
- 映射機器學習工具的景觀
- 機器學習開發環境
- 機器學習金錢
- 程序員的機器學習
- 機器學習很有意思
- 機器學習是 Kaggle 比賽
- 機器學習現在很受歡迎
- 機器學習掌握方法
- 機器學習很重要
- 機器學習 Q&amp; A:概念漂移,更好的結果和學習更快
- 缺乏自學機器學習的路線圖
- 機器學習很重要
- 快速了解任何機器學習工具(即使您是初學者)
- 機器學習工具
- 找到你的機器學習部落
- 機器學習在一年
- 通過競爭一致的大師 Kaggle
- 5 程序員在機器學習中開始犯錯誤
- 哲學畢業生到機器學習從業者(Brian Thomas 采訪)
- 機器學習入門的實用建議
- 實用機器學習問題
- 使用來自 UCI 機器學習庫的數據集練習機器學習
- 使用秘籍的任何機器學習工具快速啟動
- 程序員可以進入機器學習
- 程序員應該進入機器學習
- 項目焦點:Shashank Singh 的人臉識別
- 項目焦點:使用 Mahout 和 Konstantin Slisenko 進行堆棧交換群集
- 機器學習自學指南
- 4 個自學機器學習項目
- álvaroLemos 如何在數據科學團隊中獲得機器學習實習
- 如何思考機器學習
- 現實世界機器學習問題之旅
- 有關機器學習的有用知識
- 如果我沒有學位怎么辦?
- 如果我不是一個優秀的程序員怎么辦?
- 如果我不擅長數學怎么辦?
- 為什么機器學習算法會處理以前從未見過的數據?
- 是什么阻礙了你的機器學習目標?
- 什么是機器學習?
- 機器學習適合哪里?
- 為什么要進入機器學習?
- 研究對您來說很重要的機器學習問題
- 你這樣做是錯的。為什么機器學習不必如此困難
- Machine Learning Mastery Sklearn 教程
- Scikit-Learn 的溫和介紹:Python 機器學習庫
- 使用 Python 管道和 scikit-learn 自動化機器學習工作流程
- 如何以及何時使用帶有 scikit-learn 的校準分類模型
- 如何比較 Python 中的機器學習算法與 scikit-learn
- 用于機器學習開發人員的 Python 崩潰課程
- 用 scikit-learn 在 Python 中集成機器學習算法
- 使用重采樣評估 Python 中機器學習算法的表現
- 使用 Scikit-Learn 在 Python 中進行特征選擇
- Python 中機器學習的特征選擇
- 如何使用 scikit-learn 在 Python 中生成測試數據集
- scikit-learn 中的機器學習算法秘籍
- 如何使用 Python 處理丟失的數據
- 如何開始使用 Python 進行機器學習
- 如何使用 Scikit-Learn 在 Python 中加載數據
- Python 中概率評分方法的簡要介紹
- 如何用 Scikit-Learn 調整算法參數
- 如何在 Mac OS X 上安裝 Python 3 環境以進行機器學習和深度學習
- 使用 scikit-learn 進行機器學習簡介
- 從 shell 到一本帶有 Fernando Perez 單一工具的書的 IPython
- 如何使用 Python 3 為機器學習開發創建 Linux 虛擬機
- 如何在 Python 中加載機器學習數據
- 您在 Python 中的第一個機器學習項目循序漸進
- 如何使用 scikit-learn 進行預測
- 用于評估 Python 中機器學習算法的度量標準
- 使用 Pandas 為 Python 中的機器學習準備數據
- 如何使用 Scikit-Learn 為 Python 機器學習準備數據
- 項目焦點:使用 Artem Yankov 在 Python 中進行事件推薦
- 用于機器學習的 Python 生態系統
- Python 是應用機器學習的成長平臺
- Python 機器學習書籍
- Python 機器學習迷你課程
- 使用 Pandas 快速和骯臟的數據分析
- 使用 Scikit-Learn 重新調整 Python 中的機器學習數據
- 如何以及何時使用 ROC 曲線和精確調用曲線進行 Python 分類
- 使用 scikit-learn 在 Python 中保存和加載機器學習模型
- scikit-learn Cookbook 書評
- 如何使用 Anaconda 為機器學習和深度學習設置 Python 環境
- 使用 scikit-learn 在 Python 中進行 Spot-Check 分類機器學習算法
- 如何在 Python 中開發可重復使用的抽樣檢查算法框架
- 使用 scikit-learn 在 Python 中進行 Spot-Check 回歸機器學習算法
- 使用 Python 中的描述性統計來了解您的機器學習數據
- 使用 OpenCV,Python 和模板匹配來播放“哪里是 Waldo?”
- 使用 Pandas 在 Python 中可視化機器學習數據
- Machine Learning Mastery 統計學教程
- 淺談計算正態匯總統計量
- 非參數統計的溫和介紹
- Python中常態測試的溫和介紹
- 淺談Bootstrap方法
- 淺談機器學習的中心極限定理
- 淺談機器學習中的大數定律
- 機器學習的所有統計數據
- 如何計算Python中機器學習結果的Bootstrap置信區間
- 淺談機器學習的Chi-Squared測試
- 機器學習的置信區間
- 隨機化在機器學習中解決混雜變量的作用
- 機器學習中的受控實驗
- 機器學習統計學速成班
- 統計假設檢驗的關鍵值以及如何在Python中計算它們
- 如何在機器學習中談論數據(統計學和計算機科學術語)
- Python中數據可視化方法的簡要介紹
- Python中效果大小度量的溫和介紹
- 估計隨機機器學習算法的實驗重復次數
- 機器學習評估統計的溫和介紹
- 如何計算Python中的非參數秩相關性
- 如何在Python中計算數據的5位數摘要
- 如何在Python中從頭開始編寫學生t檢驗
- 如何在Python中生成隨機數
- 如何轉換數據以更好地擬合正態分布
- 如何使用相關來理解變量之間的關系
- 如何使用統計信息識別數據中的異常值
- 用于Python機器學習的隨機數生成器簡介
- k-fold交叉驗證的溫和介紹
- 如何計算McNemar的比較兩種機器學習量詞的測試
- Python中非參數統計顯著性測試簡介
- 如何在Python中使用參數統計顯著性測試
- 機器學習的預測間隔
- 應用統計學與機器學習的密切關系
- 如何使用置信區間報告分類器表現
- 統計數據分布的簡要介紹
- 15 Python中的統計假設檢驗(備忘單)
- 統計假設檢驗的溫和介紹
- 10如何在機器學習項目中使用統計方法的示例
- Python中統計功效和功耗分析的簡要介紹
- 統計抽樣和重新抽樣的簡要介紹
- 比較機器學習算法的統計顯著性檢驗
- 機器學習中統計容差區間的溫和介紹
- 機器學習統計書籍
- 評估機器學習模型的統計數據
- 機器學習統計(7天迷你課程)
- 用于機器學習的簡明英語統計
- 如何使用統計顯著性檢驗來解釋機器學習結果
- 什么是統計(為什么它在機器學習中很重要)?
- Machine Learning Mastery 時間序列入門教程
- 如何在 Python 中為時間序列預測創建 ARIMA 模型
- 用 Python 進行時間序列預測的自回歸模型
- 如何回溯機器學習模型的時間序列預測
- Python 中基于時間序列數據的基本特征工程
- R 的時間序列預測熱門書籍
- 10 挑戰機器學習時間序列預測問題
- 如何將時間序列轉換為 Python 中的監督學習問題
- 如何將時間序列數據分解為趨勢和季節性
- 如何用 ARCH 和 GARCH 模擬波動率進行時間序列預測
- 如何將時間序列數據集與 Python 區分開來
- Python 中時間序列預測的指數平滑的溫和介紹
- 用 Python 進行時間序列預測的特征選擇
- 淺談自相關和部分自相關
- 時間序列預測的 Box-Jenkins 方法簡介
- 用 Python 簡要介紹時間序列的時間序列預測
- 如何使用 Python 網格搜索 ARIMA 模型超參數
- 如何在 Python 中加載和探索時間序列數據
- 如何使用 Python 對 ARIMA 模型進行手動預測
- 如何用 Python 進行時間序列預測的預測
- 如何使用 Python 中的 ARIMA 進行樣本外預測
- 如何利用 Python 模擬殘差錯誤來糾正時間序列預測
- 使用 Python 進行數據準備,特征工程和時間序列預測的移動平均平滑
- 多步時間序列預測的 4 種策略
- 如何在 Python 中規范化和標準化時間序列數據
- 如何利用 Python 進行時間序列預測的基線預測
- 如何使用 Python 對時間序列預測數據進行功率變換
- 用于時間序列預測的 Python 環境
- 如何重構時間序列預測問題
- 如何使用 Python 重新采樣和插值您的時間序列數據
- 用 Python 編寫 SARIMA 時間序列預測
- 如何在 Python 中保存 ARIMA 時間序列預測模型
- 使用 Python 進行季節性持久性預測
- 基于 ARIMA 的 Python 歷史規模敏感性預測技巧分析
- 簡單的時間序列預測模型進行測試,這樣你就不會欺騙自己
- 標準多變量,多步驟和多站點時間序列預測問題
- 如何使用 Python 檢查時間序列數據是否是固定的
- 使用 Python 進行時間序列數據可視化
- 7 個機器學習的時間序列數據集
- 時間序列預測案例研究與 Python:波士頓每月武裝搶劫案
- Python 的時間序列預測案例研究:巴爾的摩的年度用水量
- 使用 Python 進行時間序列預測研究:法國香檳的月銷售額
- 使用 Python 的置信區間理解時間序列預測不確定性
- 11 Python 中的經典時間序列預測方法(備忘單)
- 使用 Python 進行時間序列預測表現測量
- 使用 Python 7 天迷你課程進行時間序列預測
- 時間序列預測作為監督學習
- 什么是時間序列預測?
- 如何使用 Python 識別和刪除時間序列數據的季節性
- 如何在 Python 中使用和刪除時間序列數據中的趨勢信息
- 如何在 Python 中調整 ARIMA 參數
- 如何用 Python 可視化時間序列殘差預測錯誤
- 白噪聲時間序列與 Python
- 如何通過時間序列預測項目
- Machine Learning Mastery XGBoost 教程
- 通過在 Python 中使用 XGBoost 提前停止來避免過度擬合
- 如何在 Python 中調優 XGBoost 的多線程支持
- 如何配置梯度提升算法
- 在 Python 中使用 XGBoost 進行梯度提升的數據準備
- 如何使用 scikit-learn 在 Python 中開發您的第一個 XGBoost 模型
- 如何在 Python 中使用 XGBoost 評估梯度提升模型
- 在 Python 中使用 XGBoost 的特征重要性和特征選擇
- 淺談機器學習的梯度提升算法
- 應用機器學習的 XGBoost 簡介
- 如何在 macOS 上為 Python 安裝 XGBoost
- 如何在 Python 中使用 XGBoost 保存梯度提升模型
- 從梯度提升開始,比較 165 個數據集上的 13 種算法
- 在 Python 中使用 XGBoost 和 scikit-learn 進行隨機梯度提升
- 如何使用 Amazon Web Services 在云中訓練 XGBoost 模型
- 在 Python 中使用 XGBoost 調整梯度提升的學習率
- 如何在 Python 中使用 XGBoost 調整決策樹的數量和大小
- 如何在 Python 中使用 XGBoost 可視化梯度提升決策樹
- 在 Python 中開始使用 XGBoost 的 7 步迷你課程