<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>

                合規國際互聯網加速 OSASE為企業客戶提供高速穩定SD-WAN國際加速解決方案。 廣告
                # 如何評估人類活動識別的機器學習算法 > 原文: [https://machinelearningmastery.com/evaluate-machine-learning-algorithms-for-human-activity-recognition/](https://machinelearningmastery.com/evaluate-machine-learning-algorithms-for-human-activity-recognition/) 人類活動識別是將由專用線束或智能電話記錄的加速度計數據序列分類為已知的明確定義的運動的問題。 該問題的經典方法涉及基于固定大小的窗口和訓練機器學習模型(例如決策樹的集合)的時間序列數據中的手工制作特征。困難在于此功能工程需要該領域的深厚專業知識。 最近,已經證明,諸如循環神經網絡和一維卷積神經網絡(CNN)之類的深度學習方法可以在很少或沒有數據特征工程的情況下提供具有挑戰性的活動識別任務的最新結果,而不是使用特征學習原始數據。 在本教程中,您將了解如何在“_ 使用智能手機的活動識別 _”數據集上評估各種機器學習算法。 完成本教程后,您將了解: * 如何在特征設計版本的活動識別數據集上加載和評估非線性和集成機器學習算法。 * 如何在活動識別數據集的原始信號數據上加載和評估機器學習算法。 * 如何定義能夠進行特征學習的更復雜算法的預期表現的合理上下界,例如深度學習方法。 讓我們開始吧。 ![How to Evaluate Machine Learning Algorithms for Human Activity Recognition](https://img.kancloud.cn/94/22/942220d4a1dd9197926a849d7087be5c_640x427.jpg) 如何評估用于人類活動識別的機器學習算法 照片由 [Murray Foubister](https://www.flickr.com/photos/mfoubister/41564699865/) ,保留一些權利。 ## 教程概述 本教程分為三個部分;他們是: 1. 使用智能手機數據集進行活動識別 2. 建模特征工程數據 3. 建模原始數據 ## 使用智能手機數據集進行活動識別 [人類活動識別](https://en.wikipedia.org/wiki/Activity_recognition),或簡稱為 HAR,是基于使用傳感器的移動痕跡來預測人正在做什么的問題。 標準人類活動識別數據集是 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 機器學習庫免費下載: * [使用智能手機數據集進行人類活動識別,UCI 機器學習庫](https://archive.ics.uci.edu/ml/datasets/human+activity+recognition+using+smartphones) 該數據來自 30 名年齡在 19 至 48 歲之間的受試者,其執行六項標準活動中的一項,同時佩戴記錄運動數據的腰部智能手機。記錄執行活動的每個受試者的視頻,并從這些視頻手動標記移動數據。 以下是在記錄其移動數據的同時執行活動的主體的示例視頻。 &lt;iframe allow="autoplay; encrypted-media" allowfullscreen="" frameborder="0" height="375" src="https://www.youtube.com/embed/XOEN9W05_4A?feature=oembed" width="500"&gt;&lt;/iframe&gt; 進行的六項活動如下: 1. 步行 2. 走上樓 3. 走樓下 4. 坐在 5. 常設 6. 鋪設 記錄的運動數據是來自智能手機的 x,y 和 z 加速度計數據(線性加速度)和陀螺儀數據(角速度),特別是三星 Galaxy S II。以 50Hz(即每秒 50 個數據點)記錄觀察結果。每個受試者進行兩次活動,一次是左側設備,另一次是右側設備。 原始數據不可用。相反,可以使用預處理版本的數據集。預處理步驟包括: * 使用噪聲濾波器預處理加速度計和陀螺儀。 * 將數據拆分為 2.56 秒(128 個數據點)的固定窗口,重疊率為 50%。 * 將加速度計數據分割為重力(總)和身體運動分量。 特征工程應用于窗口數據,并且提供具有這些工程特征的數據的副本。 從每個窗口提取在人類活動識別領域中常用的許多時間和頻率特征。結果是 561 元素的特征向量。 根據受試者的數據,將數據集分成訓練(70%)和測試(30%)組。訓練 21 個,測試 9 個。 使用旨在用于智能手機的支持向量機(例如定點算術)的實驗結果導致測試數據集的預測準確度為 89%,實現與未修改的 SVM 實現類似的結果。 該數據集是免費提供的,可以從 UCI 機器學習庫下載。 數據以單個 zip 文件的形式提供,大小約為 58 兆字節。此下載的直接鏈接如下: * [UCI HAR Dataset.zip](https://archive.ics.uci.edu/ml/machine-learning-databases/00240/UCI%20HAR%20Dataset.zip) 下載數據集并將所有文件解壓縮到當前工作目錄中名為“HARDataset”的新目錄中。 ## 建模特征工程數據 在本節中,我們將開發代碼來加載數據集的特征工程版本并評估一套非線性機器學習算法,包括原始論文中使用的 SVM。 目標是在測試數據集上實現至少 89%的準確性。 使用特征工程版數據集的方法的結果為為原始數據版本開發的任何方法提供了基線。 本節分為五個部分;他們是: * 加載數據集 * 定義模型 * 評估模型 * 總結結果 * 完整的例子 ### 加載數據集 第一步是加載訓練并測試輸入(X)和輸出(y)數據。 具體來說,以下文件: * _HARDataset / train / X_train.txt_ * _HARDataset / train / y_train.txt_ * _HARDataset / test / X_test.txt_ * _HARDataset / test / y_test.txt_ 輸入數據采用 CSV 格式,其中列通過空格分隔。這些文件中的每一個都可以作為 NumPy 數組加載。 下面的 _load_file()_ 函數在給定文件的文件路徑的情況下加載數據集,并將加載的數據作為 NumPy 數組返回。 ```py # load a single file as a numpy array def load_file(filepath): dataframe = read_csv(filepath, header=None, delim_whitespace=True) return dataframe.values ``` 考慮到目錄布局和文件名的相似性,我們可以調用此函數來加載給定訓練或測試集組的 _X_ 和 _y_ 文件。下面的 _load_dataset_group()_ 函數將為一個組加載這兩個文件,并將 X 和 y 元素作為 NumPy 數組返回。然后,此函數可用于加載訓練和測試組的 X 和 y 元素。 ```py # load a dataset group, such as train or test def load_dataset_group(group, prefix=''): # load input data X = load_file(prefix + group + '/X_'+group+'.txt') # load class output y = load_file(prefix + group + '/y_'+group+'.txt') return X, y ``` 最后,我們可以加載 train 和 test 數據集,并將它們作為 NumPy 數組返回,以便為擬合和評估機器學習模型做好準備。 ```py # load the dataset, returns train and test X and y elements def load_dataset(prefix=''): # load all train trainX, trainy = load_dataset_group('train', prefix + 'HARDataset/') print(trainX.shape, trainy.shape) # load all test testX, testy = load_dataset_group('test', prefix + 'HARDataset/') print(testX.shape, testy.shape) # flatten y trainy, testy = trainy[:,0], testy[:,0] print(trainX.shape, trainy.shape, testX.shape, testy.shape) return trainX, trainy, testX, testy ``` 我們可以調用這個函數來加載所有需要的數據;例如: ```py # load dataset trainX, trainy, testX, testy = load_dataset() ``` ### 定義模型 接下來,我們可以定義一個機器學習模型列表來評估這個問題。 我們將使用默認配置評估模型。我們目前不是在尋找這些模型的最佳配置,只是對具有默認配置的復雜模型在這個問題上表現如何的一般概念。 我們將評估一組不同的非線性和集成機器學習算法,具體來說: 非線性算法: * k-最近鄰居 * 分類和回歸樹 * 支持向量機 * 樸素貝葉斯 集合算法: * 袋裝決策樹 * 隨機森林 * 額外的樹木 * 梯度增壓機 我們將定義模型并將它們存儲在字典中,該字典將模型對象映射到有助于分析結果的簡短名稱。 下面的 _define_models()_ 函數定義了我們將評估的八個模型。 ```py # create a dict of standard models to evaluate {name:object} def define_models(models=dict()): # nonlinear models models['knn'] = KNeighborsClassifier(n_neighbors=7) models['cart'] = DecisionTreeClassifier() models['svm'] = SVC() models['bayes'] = GaussianNB() # ensemble models models['bag'] = BaggingClassifier(n_estimators=100) models['rf'] = RandomForestClassifier(n_estimators=100) models['et'] = ExtraTreesClassifier(n_estimators=100) models['gbm'] = GradientBoostingClassifier(n_estimators=100) print('Defined %d models' % len(models)) return models ``` 此功能非常易于擴展,您可以輕松更新以定義您希望的任何機器學習模型或模型配置。 ### 評估模型 下一步是評估加載的數據集中定義的模型。 該步驟分為單個模型的評估和所有模型的評估。 我們將通過首先將其擬合到訓練數據集上,對測試數據集進行預測,然后使用度量來評估預測來評估單個模型。在這種情況下,我們將使用分類精度來捕獲模型的表現(或誤差),給出六個活動(或類)的平衡觀察。 下面的 _evaluate_model()_ 函數實現了此行為,評估給定模型并將分類精度返回為百分比。 ```py # evaluate a single model def evaluate_model(trainX, trainy, testX, testy, model): # fit the model model.fit(trainX, trainy) # make predictions yhat = model.predict(testX) # evaluate predictions accuracy = accuracy_score(testy, yhat) return accuracy * 100.0 ``` 我們現在可以為每個定義的模型重復調用 _evaluate_model()_ 函數。 下面的 _evaluate_models()_ 函數實現此行為,獲取已定義模型的字典,并返回映射到其分類精度的模型名稱字典。 因為模型的評估可能需要幾分鐘,所以該函數在評估每個模型作為一些詳細的反饋之后打印它們的表現。 ```py # evaluate a dict of models {name:object}, returns {name:score} def evaluate_models(trainX, trainy, testX, testy, models): results = dict() for name, model in models.items(): # evaluate the model results[name] = evaluate_model(trainX, trainy, testX, testy, model) # show process print('>%s: %.3f' % (name, results[name])) return results ``` ### 總結結果 最后一步是總結研究結果。 我們可以按降序排列分類準確度對所有結果進行排序,因為我們對最大化準確性感興趣。 然后可以打印評估模型的結果,清楚地顯示每個評估模型的相對等級。 下面的 _summarize_results()_ 函數實現了這種行為。 ```py # print and plot the results def summarize_results(results, maximize=True): # create a list of (name, mean(scores)) tuples mean_scores = [(k,v) for k,v in results.items()] # sort tuples by mean score mean_scores = sorted(mean_scores, key=lambda x: x[1]) # reverse for descending order (e.g. for accuracy) if maximize: mean_scores = list(reversed(mean_scores)) print() for name, score in mean_scores: print('Name=%s, Score=%.3f' % (name, score)) ``` ### 完整的例子 我們知道我們已經完成了所有工作。 下面列出了在數據集的特征工程版本上評估一套八個機器學習模型的完整示例。 ```py # spot check on engineered-features from pandas import read_csv from sklearn.metrics import accuracy_score from sklearn.neighbors import KNeighborsClassifier from sklearn.tree import DecisionTreeClassifier from sklearn.svm import SVC from sklearn.naive_bayes import GaussianNB from sklearn.ensemble import BaggingClassifier from sklearn.ensemble import RandomForestClassifier from sklearn.ensemble import ExtraTreesClassifier from sklearn.ensemble import GradientBoostingClassifier # 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 dataset group, such as train or test def load_dataset_group(group, prefix=''): # load input data X = load_file(prefix + group + '/X_'+group+'.txt') # load class output y = load_file(prefix + group + '/y_'+group+'.txt') return X, y # load the dataset, returns train and test X and y elements def load_dataset(prefix=''): # load all train trainX, trainy = load_dataset_group('train', prefix + 'HARDataset/') print(trainX.shape, trainy.shape) # load all test testX, testy = load_dataset_group('test', prefix + 'HARDataset/') print(testX.shape, testy.shape) # flatten y trainy, testy = trainy[:,0], testy[:,0] print(trainX.shape, trainy.shape, testX.shape, testy.shape) return trainX, trainy, testX, testy # create a dict of standard models to evaluate {name:object} def define_models(models=dict()): # nonlinear models models['knn'] = KNeighborsClassifier(n_neighbors=7) models['cart'] = DecisionTreeClassifier() models['svm'] = SVC() models['bayes'] = GaussianNB() # ensemble models models['bag'] = BaggingClassifier(n_estimators=100) models['rf'] = RandomForestClassifier(n_estimators=100) models['et'] = ExtraTreesClassifier(n_estimators=100) models['gbm'] = GradientBoostingClassifier(n_estimators=100) print('Defined %d models' % len(models)) return models # evaluate a single model def evaluate_model(trainX, trainy, testX, testy, model): # fit the model model.fit(trainX, trainy) # make predictions yhat = model.predict(testX) # evaluate predictions accuracy = accuracy_score(testy, yhat) return accuracy * 100.0 # evaluate a dict of models {name:object}, returns {name:score} def evaluate_models(trainX, trainy, testX, testy, models): results = dict() for name, model in models.items(): # evaluate the model results[name] = evaluate_model(trainX, trainy, testX, testy, model) # show process print('>%s: %.3f' % (name, results[name])) return results # print and plot the results def summarize_results(results, maximize=True): # create a list of (name, mean(scores)) tuples mean_scores = [(k,v) for k,v in results.items()] # sort tuples by mean score mean_scores = sorted(mean_scores, key=lambda x: x[1]) # reverse for descending order (e.g. for accuracy) if maximize: mean_scores = list(reversed(mean_scores)) print() for name, score in mean_scores: print('Name=%s, Score=%.3f' % (name, score)) # load dataset trainX, trainy, testX, testy = load_dataset() # get model list models = define_models() # evaluate models results = evaluate_models(trainX, trainy, testX, testy, models) # summarize results summarize_results(results) ``` 運行該示例首先加載訓練和測試數據集,顯示每個輸入和輸出組件的形狀。 然后依次評估八個模型,打印每個模型的表現。 最后,顯示模型在測試集上的表現等級。 我們可以看到,ExtraTrees 集合方法和支持向量機非線性方法在測試集上實現了大約 94%的準確性。 這是一個很好的結果,超過原始論文中 SVM 報告的 89%。 考慮到算法的隨機性,每次運行代碼時,具體結果可能會有所不同。然而,考慮到數據集的大小,算法表現之間的相對關系應該相當穩定。 ```py (7352, 561) (7352, 1) (2947, 561) (2947, 1) (7352, 561) (7352,) (2947, 561) (2947,) Defined 8 models >knn: 90.329 >cart: 86.020 >svm: 94.028 >bayes: 77.027 >bag: 89.820 >rf: 92.772 >et: 94.028 >gbm: 93.756 Name=et, Score=94.028 Name=svm, Score=94.028 Name=gbm, Score=93.756 Name=rf, Score=92.772 Name=knn, Score=90.329 Name=bag, Score=89.820 Name=cart, Score=86.020 Name=bayes, Score=77.027 ``` 這些結果顯示了在準備數據和領域特定功能的工程中給定的領域專業知識的可能性。因此,這些結果可以作為通過更先進的方法可以追求的表現的上限,這些方法可以自動學習特征作為擬合模型的一部分,例如深度學習方法。 任何這樣的先進方法都適合并評估從中得到工程特征的原始數據。因此,直接評估該數據的機器學習算法的表現可以提供任何更高級方法的表現的預期下限。 我們將在下一節中探討這一點。 ## 建模原始數據 我們可以使用相同的框架來評估原始數據上的機器學習模型。 原始數據確實需要更多工作才能加載。 原始數據中有三種主要信號類型:總加速度,車身加速度和車身陀螺儀。每個都有三個數據軸。這意味著每個時間步長總共有九個變量。 此外,每個數據系列已被劃分為 2.65 秒數據的重疊窗口,或 128 個時間步長。這些數據窗口對應于上一節中工程特征(行)的窗口。 這意味著一行數據具有 128 * 9 或 1,152 個元素。這比前一節中 561 個元素向量的大小小一倍,并且可能存在一些冗余數據。 信號存儲在訓練和測試子目錄下的 _/ Inertial Signals /_ 目錄中。每個信號的每個軸都存儲在一個單獨的文件中,這意味著每個訓練和測試數據集都有九個要加載的輸入文件和一個要加載的輸出文件。在給定一致的目錄結構和文件命名約定的情況下,我們可以批量加載這些文件。 首先,我們可以將給定組的所有數據加載到單個三維 NumPy 數組中,其中數組的維數為[樣本,時間步長,特征]。為了更清楚,有 128 個時間步和 9 個特征,其中樣本數是任何給定原始信號數據文件中的行數。 下面的 _load_group()_ 函數實現了這種行為。 _dstack()_ NumPy 函數允許我們將每個加載的 3D 數組堆疊成單個 3D 數組,其中變量在第三維(特征)上分開。 ```py # load a list of files into a 3D array of [samples, timesteps, features] 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_dataset_group()_ 函數使用目錄之間的一致命名約定加載單個組的所有輸入信號數據和輸出數據。 ```py # load a dataset group, such as train or test def load_dataset_group(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 ``` 最后,我們可以加載每個訓練和測試數據集。 作為準備加載數據的一部分,我們必須將窗口和特征展平為一個長向量。 我們可以使用 NumPy 重塑功能執行此操作,并將[_ 樣本,時間步長,特征 _]的三個維度轉換為[_ 樣本,時間步長*特征 _]的兩個維度。 下面的 _load_dataset()_ 函數實現了這種行為,并返回訓練并測試 _X_ 和 _y_ 元素,以便擬合和評估定義的模型。 ```py # load the dataset, returns train and test X and y elements def load_dataset(prefix=''): # load all train trainX, trainy = load_dataset_group('train', prefix + 'HARDataset/') print(trainX.shape, trainy.shape) # load all test testX, testy = load_dataset_group('test', prefix + 'HARDataset/') print(testX.shape, testy.shape) # flatten X trainX = trainX.reshape((trainX.shape[0], trainX.shape[1] * trainX.shape[2])) testX = testX.reshape((testX.shape[0], testX.shape[1] * testX.shape[2])) # flatten y trainy, testy = trainy[:,0], testy[:,0] print(trainX.shape, trainy.shape, testX.shape, testy.shape) return trainX, trainy, testX, testy ``` 綜合這些,下面列出了完整的例子。 ```py # spot check on raw data from numpy import dstack from pandas import read_csv from sklearn.metrics import accuracy_score from sklearn.neighbors import KNeighborsClassifier from sklearn.tree import DecisionTreeClassifier from sklearn.svm import SVC from sklearn.naive_bayes import GaussianNB from sklearn.ensemble import BaggingClassifier from sklearn.ensemble import RandomForestClassifier from sklearn.ensemble import ExtraTreesClassifier from sklearn.ensemble import GradientBoostingClassifier # 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 into a 3D array of [samples, timesteps, features] 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(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 the dataset, returns train and test X and y elements def load_dataset(prefix=''): # load all train trainX, trainy = load_dataset_group('train', prefix + 'HARDataset/') print(trainX.shape, trainy.shape) # load all test testX, testy = load_dataset_group('test', prefix + 'HARDataset/') print(testX.shape, testy.shape) # flatten X trainX = trainX.reshape((trainX.shape[0], trainX.shape[1] * trainX.shape[2])) testX = testX.reshape((testX.shape[0], testX.shape[1] * testX.shape[2])) # flatten y trainy, testy = trainy[:,0], testy[:,0] print(trainX.shape, trainy.shape, testX.shape, testy.shape) return trainX, trainy, testX, testy # create a dict of standard models to evaluate {name:object} def define_models(models=dict()): # nonlinear models models['knn'] = KNeighborsClassifier(n_neighbors=7) models['cart'] = DecisionTreeClassifier() models['svm'] = SVC() models['bayes'] = GaussianNB() # ensemble models models['bag'] = BaggingClassifier(n_estimators=100) models['rf'] = RandomForestClassifier(n_estimators=100) models['et'] = ExtraTreesClassifier(n_estimators=100) models['gbm'] = GradientBoostingClassifier(n_estimators=100) print('Defined %d models' % len(models)) return models # evaluate a single model def evaluate_model(trainX, trainy, testX, testy, model): # fit the model model.fit(trainX, trainy) # make predictions yhat = model.predict(testX) # evaluate predictions accuracy = accuracy_score(testy, yhat) return accuracy * 100.0 # evaluate a dict of models {name:object}, returns {name:score} def evaluate_models(trainX, trainy, testX, testy, models): results = dict() for name, model in models.items(): # evaluate the model results[name] = evaluate_model(trainX, trainy, testX, testy, model) # show process print('>%s: %.3f' % (name, results[name])) return results # print and plot the results def summarize_results(results, maximize=True): # create a list of (name, mean(scores)) tuples mean_scores = [(k,v) for k,v in results.items()] # sort tuples by mean score mean_scores = sorted(mean_scores, key=lambda x: x[1]) # reverse for descending order (e.g. for accuracy) if maximize: mean_scores = list(reversed(mean_scores)) print() for name, score in mean_scores: print('Name=%s, Score=%.3f' % (name, score)) # load dataset trainX, trainy, testX, testy = load_dataset() # get model list models = define_models() # evaluate models results = evaluate_models(trainX, trainy, testX, testy, models) # summarize results summarize_results(results) ``` 首先運行該示例加載數據集。 我們可以看到原始序列和測試集具有與工程特征(分別為 7352 和 2947)相同數量的樣本,并且正確加載了三維數據。我們還可以看到平面數據和將提供給模型的 1152 輸入向量。 接下來依次評估八個定義的模型。 最終結果表明,決策樹的集合在原始數據上表現最佳。梯度增強和額外樹木以最高 87%和 86%的準確度表現最佳,比數據集的特征工程版本中表現最佳的模型低約 7 個點。 令人鼓舞的是,Extra Trees 集合方法在兩個數據集上都表現良好;它表明它和類似的樹集合方法可能適合這個問題,至少在這個簡化的框架中。 我們還可以看到 SVM 下降到約 72%的準確度。 決策樹集合的良好表現可能表明需要特征選擇和集合方法能夠選擇與預測相關活動最相關的那些特征。 ```py (7352, 128, 9) (7352, 1) (2947, 128, 9) (2947, 1) (7352, 1152) (7352,) (2947, 1152) (2947,) Defined 8 models >knn: 61.893 >cart: 72.141 >svm: 76.960 >bayes: 72.480 >bag: 84.527 >rf: 84.662 >et: 86.902 >gbm: 87.615 Name=gbm, Score=87.615 Name=et, Score=86.902 Name=rf, Score=84.662 Name=bag, Score=84.527 Name=svm, Score=76.960 Name=bayes, Score=72.480 Name=cart, Score=72.141 Name=knn, Score=61.893 ``` 如前一節所述,這些結果為可能嘗試從原始數據自動學習更高階特征(例如,通過深度學習方法中的特征學習)的任何更復雜的方法提供了精確度的下限。 總之,此類方法的界限在原始數據上從 GBM 的約 87%準確度擴展到高度處理的數據集上的額外樹和 SVM 的約 94%,[87%至 94%]。 ## 擴展 本節列出了一些擴展您可能希望探索的教程的想法。 * **更多算法**。在這個問題上只評估了八種機器學習算法;嘗試一些線性方法,也許還有一些非線性和集合方法。 * **算法調整**。沒有調整機器學習算法;主要使用默認配置。選擇一種方法,例如 SVM,ExtraTrees 或 Gradient Boosting,并搜索一組不同的超參數配置,以查看是否可以進一步提升問題的表現。 * **數據縮放**。數據已經按比例縮放到[-1,1]。探索額外的擴展(例如標準化)是否可以帶來更好的表現,可能是對這種擴展敏感的方法(如 kNN)。 如果你探索任何這些擴展,我很想知道。 ## 進一步閱讀 如果您希望深入了解,本節將提供有關該主題的更多資源。 ### 文件 * [使用智能手機進行人類活動識別的公共領域數據集](https://upcommons.upc.edu/handle/2117/20897),2013 年。 * [智能手機上的人類活動識別使用多類硬件友好支持向量機](https://link.springer.com/chapter/10.1007/978-3-642-35395-6_30),2012。 ### 用品 * [使用智能手機數據集進行人類活動識別,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)。 ## 摘要 在本教程中,您了解了如何在'_ 使用智能手機的活動識別 _'數據集上評估各種機器學習算法。 具體來說,你學到了: * 如何在特征設計版本的活動識別數據集上加載和評估非線性和集成機器學習算法。 * 如何在活動識別數據集的原始信號數據上加載和評估機器學習算法。 * 如何定義能夠進行特征學習的更復雜算法的預期表現的合理上下界,例如深度學習方法。 你有任何問題嗎? 在下面的評論中提出您的問題,我會盡力回答。
                  <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>

                              哎呀哎呀视频在线观看