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

歡迎訪問 生活随笔!

生活随笔

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

python

python文本特征选择,机器学习--特征选择(Python实现)

發布時間:2024/9/27 python 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python文本特征选择,机器学习--特征选择(Python实现) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

特征選擇就是從原始特征中選取一些最有效的特征來降低維度,,提高模型泛化能力減低過擬合的過程,主要目的是剔除掉無關特征和冗余特征,選出最優特征子集;

常見的特征選擇方法可以分為3類:過濾式(filter)、包裹式(wrapper)、嵌入式(embedding)。

1.過濾式filter:

通過方差選擇法、相關系數法、卡方檢驗法、互信息法來對特征進行評分,設定閾值或者待選擇的閾值的個數來選擇;

1.1方差選擇法

計算各個特征的方差,剔除小于設定的閾值的特征,剔除特征值 波動較小的特征,例如一個特征的所有值都為1,那這個特征對于預測目標變量就沒什么作用;方法很簡單,但實際應用中只有少數變量才會存在只取某個值的情況,對特征選擇作用比較小,可以當做數據預處理部分,之后再用其他方法進行特征選擇。

from sklearn.feature_selection import VarianceThreshold

var = VarianceThreshold(threshold=0)

var.fit_transform(df)

df = df.iloc[var.get_support(True),:]

#VarianceThreshold返回已經提出方差為0的列,通過get_support[True]定位

剩余變量所在的列

1.2 單變量特征選擇

1.2.1相關系數法

皮爾森相關系數衡量的是變量之間的線性相關性,取值范圍在-1-+1之間,-1表示完全負相關,+1表示完全正相關,0表示線性無關;

可以使用scipy的pearsonr 計算皮爾森相關系數,且它還可以同時計算出p值

import numpy as np

from scipy.stats import pearsonr

x = np.random.normal(0,10,300)

y = x + np.random.normal(0,10,300)

pearsonr(x,y)

但是皮爾森相關系數只衡量線性關系,即使兩個變量之間有較強的非線性關系,皮爾森系數也有可能接近為0;

1.2.2.卡方檢驗法

檢驗定性自變量對定性因變量的相關性,卡方公式為:

其中Ai為觀測頻數,Ei為期望頻數

from sklearn.feature_selection import chi2

#chi2要求變量值非負,返回卡方值和P值

from sklearn.feature_selection import SelectKBest

from sklearn.datasets import load_iris

iris = load_iris()

model = SelectKBest(chi2, k=2)

model.fit_transform(iris.data,iris.target)

var = model.get_support(True)

1.2.3 互信息法和最大信息系數

互信息法也是評價定性自變量對定性因變量的相關性的,但是并不方便直接用于特征選擇,一是因為它不屬于度量方式,也沒有辦法進行歸一化,在不同的數據上的結果無法做比較;二是因為對于連續變量的計算不是很方便,通常需要將變量離散化,而互信息的結果對離散化的方法很敏感;

因此引入了最大信息系數 。最大信息系數首先尋找一種最優的離散方式,然后把互信息取值轉換成一種度量方式,取值區間在[0,1],minepy模塊提供了MIC(最大信息系數)方法:

x = np.random.normal(0,10,300)

z = x *x

pearsonr(x,z)

#計算得皮爾森系數= -0.1

from minepy import MINE

m = MINE()

m.compute_score(x, z)

print(m.mic())

#mic系數= 1.0

1.2.4 距離相關系數法

距離相關系數是為了克服皮爾森相關系數只能衡量線性關系的弱點而生的。x和x^2的皮爾森相關系數可能接近于0,但是這兩個變量并不是獨立不相關的。使用距離相關系數就可以計算x和x^2的非線性關系,如果距離相關系數接近于0,就可以說兩個變量之間是獨立的。R語言的energy包提供了距離相關系數的函數,Python沒有直接計算的包,可以查看https://gist.github.com/josef-pkt/2938402;

#R語言

x

z

dcor(x, z)

計算得 x,x**2的距離相關系數為0.98

2.包裹式Wrapper

根據預測效果(AUC/MSE)或者其他方法對特征組合進行評分,主要方法有遞歸特征消除法;

遞歸特征消除法的主要思想是反復的構建模型,然后選出最好或最壞的特征,把選出的特征放到一邊,然后在剩余的特征上重復這個過程,直到所有特征都遍歷了。在這個過程中特征被消除的次序就是特征的排序。

from sklearn.feature_selection import RFE

from sklearn.linear_model import LinearRegression

lr = LinearRegression()

rfe = RFE(lr, n_features_to_select=2)

rfe.fit(iris.data, iris.target)

var = rfe.get_support(True)

3.嵌入式Embedded

3.1正則化

正則化主要包括L1正則化和L2正則化:

L1正則化將系數W的L1范數作為懲罰項加到損失函數中,L1正則方法具有稀疏解的特性,因此天然具有特征選擇的特性,但是不代表沒被選到的特征就不重要,有可能是因為兩個高度相關的特征最后只保留了一個;另外L1正則化和非正則化模型一樣是不穩定的,如果特征集合中具有相關聯的特征,當數據發生細微變化時也有可能導致很大的模型差異。

from sklearn.linear_model import Lasso

from sklearn.preprocessing import StandardScaler

scaler = StandardScaler()

x = scaler.fit_transform(iris.data)

y = iris.target

lasso = Lasso(alpha=0.2)

lasso.fit(x,y)

lasso.coef_

L2正則化將系數向量的L2范數添加到損失函數中,由于L2懲罰項中的系數是二次方的,會讓系數的取值變得平均,對于有相關性的變量,會得到相近的系數;L2正則化也較L1穩定;

import pandas as pd

from sklearn.datasets import load_iris

from sklearn.preprocessing import StandardScaler

from sklearn.linear_model import LinearRegression

from sklearn.linear_model import Lasso

from sklearn.linear_model import Ridge

iris = load_iris()

#看一下各變量之間的相關性

data = pd.DataFrame(iris.data)

data.corr()

可以看出2和3、0和2、3變量之間有較強的關聯性,然后看一下分別使用線性回歸、L1正則化和L2正則化后的變量系數:

scaler = StandardScaler()

x = scaler.fit_transform(iris.data)

y = iris.target

lr = LinearRegression()

lr.fit(x,y)

lr.coef_

lasso = Lasso(alpha=0.5)

lasso.fit(x,y)

lasso.coef_

ridge = Ridge(alpha=10)

ridge.fit(x,y)

ridge.coef_

可以看出L1正則化后容易得到一個稀疏矩陣,L2正則化后系數會趨于平均。

3.2樹模型

可以利用隨機森林或者GBDT模型進行特征選擇,之前我有一篇博文講的這個,這里不再詳細說明;上一篇隨機森林篩選變量的鏈接:https://mp.weixin.qq.com/s/6gc3H2y6SnOzdyx_L2WBwg

總結

以上是生活随笔為你收集整理的python文本特征选择,机器学习--特征选择(Python实现)的全部內容,希望文章能夠幫你解決所遇到的問題。

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