日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

python 高维数据_用Sci-kit learn和XGBoost进行多类分类:Brainwave数据案例研究

發布時間:2023/12/10 python 43 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python 高维数据_用Sci-kit learn和XGBoost进行多类分类:Brainwave数据案例研究 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

在機器學習中,高維數據的分類問題非常具有挑戰性。有時候,非常簡單的問題會因為這個“維度詛咒”問題變得非常復雜。在本文中,我們將了解不同分類器的準確性和性能是如何變化的。

理解數據

對于本文,我們將使用Kaggle的“EEG Brainwave Dataset”(https://www.kaggle.com/birdy654/eeg-brainwave-dataset-feeling-emotions) 。該機器學習數據集包含來自EEG headset的電子腦電波信號,并且是時間格式的。

首先,讓我們先讀取數據,Python代碼如下:

import pandas as pdbrainwave_df = pd.read_csv('../data/emotions.csv', index_col=False)brainwave_df.head()

該機器學習數據集中有2549列,“label”是我們分類問題的目標列。其他所有列,如“mean_d_1_a”、“mean_d2_a”等,都描述了腦電波信號讀取的特征。以“fft”前綴開始的列很可能是原始信號的“快速傅里葉變換”。我們的目標列“label”描述了情緒的程度。

正如Kaggle所說,這是一個挑戰:“我們能從腦電波讀數預測情緒嗎?”

讓我們首先理解列'label'中的類分布,Python代碼如下:

import seaborn as snsimport matplotlib.pyplot as pltplt.figure(figsize=(12,5))sns.countplot(x=brainwave_df.label, color='mediumseagreen')plt.title('Emotional sentiment class distribution', fontsize=16)plt.ylabel('Class Counts', fontsize=16)plt.xlabel('Class Label', fontsize=16)plt.xticks(rotation='vertical');

圖1

因此,情緒有三個類別,“POSITIVE(正面)”,“NEGATIVE(負面)”和“NEUTRAL(中性)”。從條形圖中可以清楚地看出,類分布沒有偏態,它是一個帶有目標變量“label”的“多類分類”問題。我們將嘗試不同的分類器,看看準確度。

在應用任何分類器之前,應將“label”列與其他特征列分開('mean_d_1_a','mean_d2_a'等是特征)。

label_df = brainwave_df['label']brainwave_df.drop('label', axis = 1, inplace=True)brainwave_df.head()

由于這是一個“分類”問題,我們將按照以下約定對每個“分類器”進行嘗試:

  • 我們將在機器學習數據集上使用“交叉驗證”(在我們的例子中將使用10 fold交叉驗證)方法并取平均準確度。這將為我們提供分類器準確性的整體視圖。
  • 我們將使用基于“管道”的方法將所有預處理和主分類器計算結合起來。機器學習(ML)“管道”將所有處理階段封裝在一個單元中,并充當“分類器”本身。這樣,所有階段都可重用,并可用于形成其他“管道”。
  • 我們將跟蹤每種方法的構建和測試的總時間。
  • 對于上述內容,我們將主要使用Python中的scikit-learn包。由于這里的特征數量非常多,因此將從一個適用于高維數據的分類器開始。

    隨機森林分類器

    隨機森林是一種基于樹和bagging方法的集成分類器。采用概率熵計算方法,自動減少特征個數。讓我們看看Python實現:

    %%timefrom sklearn.pipeline import Pipelinefrom sklearn.ensemble import RandomForestClassifierfrom sklearn.model_selection import cross_val_score, train_test_splitpl_random_forest = Pipeline(steps=[('random_forest', RandomForestClassifier())])scores = cross_val_score(pl_random_forest, brainwave_df, label_df, cv=10,scoring='accuracy')print('Accuracy for RandomForest : ', scores.mean())

    準確度非常好,達到97.7%,“總時間”非常短(僅限3.29秒)。

    對于該分類器,不需要諸如縮放或噪聲去除之類的預處理階段,因為它完全基于概率并且完全不受縮放因子的影響。

    邏輯回歸分類器

    “邏輯回歸”是一種線性分類器,其工作方式與線性回歸相同。

    %%timefrom sklearn.pipeline import Pipelinefrom sklearn.preprocessing import StandardScalerfrom sklearn.linear_model import LogisticRegressionpl_log_reg = Pipeline(steps=[('scaler',StandardScaler()), ('log_reg', LogisticRegression(multi_class='multinomial', solver='saga', max_iter=200))])scores = cross_val_score(pl_log_reg, brainwave_df, label_df, cv=10,scoring='accuracy')print('Accuracy for Logistic Regression: ', scores.mean())

    我們可以看到準確度(93.19%)低于'RandomForest','時間'更高(2分7秒)。

    “邏輯回歸”受到因變量的不同值范圍的嚴重影響,因此強制“特征縮放”。這就是為什么來自scikit-learn的'StandardScaler'被添加為預處理階段的原因。它根據具有零均值和單位方差的高斯分布自動縮放特征,因此所有變量的值范圍從-1到+1。

    花費大量時間的原因是因為高維性和縮放時間。數據集中有2549個變量,每個變量的系數應根據邏輯回歸過程進行優化。此外,還有一個多重共線性的問題。這意味著線性相關變量應該組合在一起,而不是單獨考慮它們。

    多重共線性的存在影響準確性。所以現在的問題是,“我們能否減少變量的數量,減少多重共線性,并改善'花費的時間'呢?”

    主成分分析(PCA)

    PCA可以將原始的低級變量轉換為更高維的空間,從而減少所需變量的數量。所有的共線性變量聚在一起。讓我們做一個PCA的數據:

    from sklearn.decomposition import PCAfrom sklearn.preprocessing import StandardScalerscaler = StandardScaler()scaled_df = scaler.fit_transform(brainwave_df)pca = PCA(n_components = 20)pca_vectors = pca.fit_transform(scaled_df)for index, var in enumerate(pca.explained_variance_ratio_): print("Explained Variance ratio by Principal Component

    總結

    以上是生活随笔為你收集整理的python 高维数据_用Sci-kit learn和XGBoost进行多类分类:Brainwave数据案例研究的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。