尝试 select 功能时代码进入无限循环
Code enters infinite loop when trying to select features
我正在尝试对具有二进制 class 问题的 (5000, 37)
数据使用 scikit learn 的递归特征消除和交叉验证,每当我拟合模型时,算法就会进入无限循环。
目前,我正在关注这个例子:https://scikit-learn.org/stable/auto_examples/feature_selection/plot_rfe_with_cross_validation.html 关于如何使用这个算法。
我的数据是:
from sklearn.svm import SVC
from sklearn.model_selection import StratifiedKFold
from sklearn.feature_selection import RFECV
X = np.random.randint(0,363175645.191632,size=(5000, 37))
Y = np.random.choice([0, 1], size=(37,))
我尝试通过以下方式对 select 功能进行操作:
svc = SVC(kernel="linear")
rfecv = RFECV(estimator=svc, step=1, cv=StratifiedKFold(2),
scoring='accuracy')
rfecv.fit(X, Y)
代码挂起并进入无限循环,但是当我尝试使用其他算法(例如 ExtraTreesClassifier)时,它工作得很好,这是怎么回事,请帮忙?
当你执行 svm 时,因为它是基于距离的,所以缩放你的特征变量是有意义的,特别是在你的情况下,当它们很大时。您也可以查看 this intro to svm。使用示例数据集:
from sklearn.datasets import make_blobs
import seaborn as sns
import numpy as np
from sklearn.preprocessing import StandardScaler
Scaler = StandardScaler()
X, y = make_blobs(n_samples=5000, centers=3, shuffle=False,random_state=42)
X = np.concatenate((X,np.random.randint(0,363175645.191632,size=(5000,35))),axis=1)
y = (y==1).astype('int')
X_scaled = Scaler.fit_transform(X)
这个数据集的前两列只有 2 个有用的变量,从图中可以看出:
plt.scatter(x=X_scaled[:,0],y=X_scaled[:,1],c=['k' if i else 'b' for i in y])
现在我们 运行 rfe 缩放数据,我们可以看到它 returns 前两列作为顶级变量:
from sklearn.svm import SVC
from sklearn.model_selection import StratifiedKFold
from sklearn.feature_selection import RFECV
svc = SVC(kernel="linear")
rfecv = RFECV(estimator=svc, step=1, cv=StratifiedKFold(2),scoring='accuracy')
rfecv.fit(X_scaled, y)
rfecv.ranking_
array([ 1, 2, 17, 28, 33, 22, 23, 26, 6, 19, 20, 4, 10, 25, 3, 27, 11,
8, 18, 5, 29, 14, 7, 21, 9, 13, 24, 30, 35, 31, 32, 34, 16, 36,
37, 12, 15])
我正在尝试对具有二进制 class 问题的 (5000, 37)
数据使用 scikit learn 的递归特征消除和交叉验证,每当我拟合模型时,算法就会进入无限循环。
目前,我正在关注这个例子:https://scikit-learn.org/stable/auto_examples/feature_selection/plot_rfe_with_cross_validation.html 关于如何使用这个算法。
我的数据是:
from sklearn.svm import SVC
from sklearn.model_selection import StratifiedKFold
from sklearn.feature_selection import RFECV
X = np.random.randint(0,363175645.191632,size=(5000, 37))
Y = np.random.choice([0, 1], size=(37,))
我尝试通过以下方式对 select 功能进行操作:
svc = SVC(kernel="linear")
rfecv = RFECV(estimator=svc, step=1, cv=StratifiedKFold(2),
scoring='accuracy')
rfecv.fit(X, Y)
代码挂起并进入无限循环,但是当我尝试使用其他算法(例如 ExtraTreesClassifier)时,它工作得很好,这是怎么回事,请帮忙?
当你执行 svm 时,因为它是基于距离的,所以缩放你的特征变量是有意义的,特别是在你的情况下,当它们很大时。您也可以查看 this intro to svm。使用示例数据集:
from sklearn.datasets import make_blobs
import seaborn as sns
import numpy as np
from sklearn.preprocessing import StandardScaler
Scaler = StandardScaler()
X, y = make_blobs(n_samples=5000, centers=3, shuffle=False,random_state=42)
X = np.concatenate((X,np.random.randint(0,363175645.191632,size=(5000,35))),axis=1)
y = (y==1).astype('int')
X_scaled = Scaler.fit_transform(X)
这个数据集的前两列只有 2 个有用的变量,从图中可以看出:
plt.scatter(x=X_scaled[:,0],y=X_scaled[:,1],c=['k' if i else 'b' for i in y])
现在我们 运行 rfe 缩放数据,我们可以看到它 returns 前两列作为顶级变量:
from sklearn.svm import SVC
from sklearn.model_selection import StratifiedKFold
from sklearn.feature_selection import RFECV
svc = SVC(kernel="linear")
rfecv = RFECV(estimator=svc, step=1, cv=StratifiedKFold(2),scoring='accuracy')
rfecv.fit(X_scaled, y)
rfecv.ranking_
array([ 1, 2, 17, 28, 33, 22, 23, 26, 6, 19, 20, 4, 10, 25, 3, 27, 11,
8, 18, 5, 29, 14, 7, 21, 9, 13, 24, 30, 35, 31, 32, 34, 16, 36,
37, 12, 15])