from gplearn.genetic import SymbolicTransformer
from sklearn.utils import check_random_state
from sklearn.datasets import load_diabetes
import numpy as np
from sklearn.linear_model import Ridge
rng = check_random_state(0)
diabetes = load_diabetes()
perm = rng.permutation(diabetes.target.size) #重新排列
diabetes.data = diabetes.data[perm] #获得X
diabetes.target = diabetes.target[perm] #获得y
#单独使用Ridge Regression的效果作为base
#训练样本量300,测试样本量是200
est = Ridge()
est.fit(diabetes.data[:300,:], diabetes.target[:300])
print("Ridge Regression Score: ", est.score(diabetes.data[300:,:], diabetes.target[300:]))
#使用SymbolicTransformer生成特征再用Ridge Regression
function_set = ['add', 'sub', 'mul', 'div', 'sqrt', 'log', 'abs', 'neg', 'inv', 'max', 'min'] #函数集合
gp = SymbolicTransformer(
generations = 30, #迭代次数
population_size=2000, #每次有多少公式
hall_of_fame=100,
n_components=10, #生成特征个数
function_set=function_set, #运算符号集合
parsimony_coefficient=0.0005, #乘法系数
max_samples=0.9, #每次计算适应度抽样比例
verbose=0,
random_state=0
)
gp.fit(diabetes.data[:300,:], diabetes.target[:300])
#将生成的新特征与原来数据合并
gp_features = gp.transform(diabetes.data) #生成新特征
new_diabetes = np.hstack((diabetes.data,gp_features)) #合并
est = Ridge()
est.fit(new_diabetes[:300,:],diabetes.target[:300])
print("SymbolicTransformer + Ridge Regression Score: ", est.score(new_diabetes[300:,:], diabetes.target[300:]))
这段代码是什么代码
最新发布