整合營銷服務商

          電腦端+手機端+微信端=數據同步管理

          免費咨詢熱線:

          特征篩選的幾種方法,附代碼(百分百有用)

          方差對于單變量選擇

          # 計算變量的方差
          # 如果方差接近于0,也就是該特征的特征值之間基本上沒有差異,這個特征對于樣本的區分并沒有什么用,剔除
          from sklearn.feature_selection import VarianceThreshold
          selector = VarianceThreshold(threshold=0.1) #默認threshold=0.0
          selector.fit_transform(df[numerical_features])
          
          # 查看各個特征的方差,
          selector.variances_ ,len(selector.variances_)
          
          # 特征對應方差
          all_used_features_dict = dict(zip(numerical_features,selector.variances_ ))
          all_used_features_dict

          數值特征和目標值之間的相關性

          協方差

          ?如果協方差為正,說明X,Y同向變化,協方差越大說明同向程度越高;

          ?如果協方差維負,說明X,Y反向運動,協方差越小說明反向程度越高;

          ?如果兩個變量相互獨立,那么協方差就是0,說明兩個變量不相關。

          pearson系數

          (1) 相關概念和值大小含義

          相關系數也可以看成協方差:一種剔除了兩個變量量綱影響、標準化后的特殊協方差。

          可以反映兩個變量變化時是同向還是反向,如果同向變化就為正,反向變化就為負。由于它是標準化后的協方差,因此更重要的特性來了,它消除了兩個變量變化幅度的影響,而只是單純反應兩個變量每單位變化時的相似程度。

          假設對于Pearson r相關性,兩個變量都應該是正態分布的

          pearson數值大小衡量相關性:

          0.8-1.0 極強相關 | 0.6-0.8 強相關 | 0.4-0.6 中等程度相關 | 0.2-0.4 弱相關 | 0.0-0.2 極弱相關或無相關

          (2) pearson 系數的優缺點:

          ?優點: 可以通過數值對變量之間相關性衡量,正值代表正相關、負值代表負相關、0代表不相關

          ?缺點: 沒有對變量之間的關系進行提煉和學習,預測其實是學習不同特征之間的組合既關系。只能判別特征之間的線性相關性,如果是非線性相關就不可取。

          (3) 適用場景

          兩個變量之間是線性關系,都是連續數據。

          兩個變量的總體是正態分布,或接近正態的單峰分布。

          兩個變量的觀測值是成對的,每對觀測值之間相互獨立

          (4) 相關代碼

          通過numpy

          import numpy as np
          np.corrcoef([a,b,c,d])

          pandas中corr()函數

          import matplotlib.pyplot as plt
          plt.figure(figsize = (25,25))
          #### 傳入相關特征即可,輸出為所有特征之間相關性
          corr_values1 = data[features].corr()
          sns.heatmap(corr_values1, annot=True,vmax=1, square=True, cmap="Blues",fmt='.2f')
          plt.tight_layout()
          plt.savefig('**.png',dpi=600)
          plt.show()

          利用scipy,輸出兩個值,第一個值為相關系數,第二個值越小代表兩個之間相關性越高

          import numpy as np
          from scipy.stats import pearsonr
          ### 計算兩個特征之間相關性,同時也可以計算特征和標簽之間相關性
          print("Lower noise", df(x, x1))

          (5) 通過pearson系數刪選特征

          ? 5.1 通過和label之間的相關性之間,通過設置閾值刪選

          def del_corr_fea(df,cor_df):
              """
              df是原始數據,cor_df為通過pd.corr()獲得特征間相關性矩陣,
              """
              cor_df = cor_df.reset_index()
              feature_col = [col for col in df.columns if col not in drop_fea_list]
              drop_fea = []
              for i,f in enumerate(feature_col):
                  if f not in drop_fea:
                      cor_df1 = cor_df[i+1:][[f,'index']]
                      cor_df_sel = cor_df1[cor_df1[f]>=0.8]
                      cor_df_sel.sort_values(by=[f],ascending = False,inplace = True)
                      del_name = cor_df_sel['index'].values.tolist()[1:]
                      drop_fea = del_name + drop_fea
              return drop_fea
          drop_list_no_p = del_corr_fea(data_end,corr_values_fea_fea)

          5.2 首先計算不同特征之間相關性,然后通過相關性取出相似性最高的幾個特征,并保留和label間系數最高的特征

           def del_corr_fea(df,cor_df,cor_df_with_label):
              """
              df是原始數據,cor_df為通過pd.corr()獲得特征間相關性矩陣,cor_df_with_label和標簽之間相關性
              """
              cor_df = cor_df.reset_index()
              cor_df = cor_df.rename(columns = {'index':'feature'})
              feature_col = [col for col in df.columns if col not in drop_fea_list]
              drop_fea = []
              for i,f in enumerate(feature_col):
                  if f not in drop_fea:
                      print(len(drop_fea))
                      cor_df1 = cor_df[i:][[f,'feature']]
                      cor_df_sel = cor_df1[cor_df1[f]>=0.8]
                      sort_corr_df = cor_df_sel.merge(cor_df_with_label,on = 'feature',how = 'left')
                      ## p 更改為相關性矩陣的列名
                      sort_corr_df.sort_values(by=['p'],ascending = False,inplace = True)
                      del_name = sort_corr_df['feature'].values.tolist()[1:]
                      drop_fea = del_name + drop_fea
              return drop_fea
          drop_feature_list = del_corr_fea(data_end,corr_values_fea_fea,d_df)
          len(drop_feature_list)

          通過模型輸出特征重要性(包括數值型和類別)

          (1) 最簡單方式(回歸模型,分類可以去官網查 https://scikit-learn.org/stable/modules/generated/sklearn.feature_selection.SelectKBest.html#sklearn.feature_selection.SelectKBest.set_params)

          from sklearn.feature_selection import SelectKBest,f_regression
          
          print(data_end.shape)
          
          sk=SelectKBest(f_regression,k=300)
          # drop_columns 為不需要判別的列名
          new_train=sk.fit_transform(data_end.drop(drop_columns,axis = 1),data_end['label'].astype('int'))
          print(new_train.shape)
          
          # 獲取對應列索引
          select_columns=sk.get_support(indices = True)
          print(select_columns)
          print(data_end.columns[select_columns])

          (2) 通過樹模型輸出特征重要性,一般選用Xgboost、Lightgbm等,這里采用lightgbm示例。

           今天這篇文章跟大家分享的主題是關于篩選頁面的設計。作為一個有逼格的設計師,你不但要知道怎么做,還要知道為什么這么做。以免被甲方、老板、運營等問的啞口無言、冒頭苦改設計,經歷身心的摧殘后,一句“還是第一版最好”內心崩潰。

          過javascript獲取日期方法封裝一些年月日期篩選,方便日后調用!

          具體集合了以下幾種方法

          效果如下:

          主要代碼:

          html:

          javascript:


          上一篇:jQuery的ajax請求
          下一篇:HTML DOM Base 對象
          主站蜘蛛池模板: 亚洲av日韩综合一区久热| 国产伦精品一区二区三区| 亚洲区精品久久一区二区三区 | 精品少妇人妻AV一区二区三区| 色噜噜一区二区三区| 69久久精品无码一区二区| 国产A∨国片精品一区二区| 在线欧美精品一区二区三区| 国产一区二区三区乱码| 女人和拘做受全程看视频日本综合a一区二区视频 | 日韩精品视频一区二区三区| 无码AV动漫精品一区二区免费| 中文字幕日韩一区二区不卡| 久久国产午夜一区二区福利| 一区二区国产在线播放| 国内精自品线一区91| 亚洲综合一区二区| 亚洲福利视频一区| 国产一区二区四区在线观看 | 99精品国产高清一区二区| 国产一在线精品一区在线观看| 国产综合精品一区二区| 国产日产久久高清欧美一区| 少妇无码一区二区三区免费| 中文字幕在线精品视频入口一区| 国产一区视频在线免费观看| 午夜视频一区二区| 激情无码亚洲一区二区三区| 精品深夜AV无码一区二区| 亚欧成人中文字幕一区| 亚洲国产精品一区二区成人片国内| 久久久久人妻精品一区二区三区| 国产一区二区三区免费| 久久国产一区二区| 无码人妻一区二区三区在线视频| 国产高清视频一区三区| 亚欧色一区W666天堂| 日韩高清国产一区在线 | 国产精久久一区二区三区| 色一情一乱一伦一区二区三区日本 | 国产在线一区二区视频|