怎么判断上半场会进球;如何判断模型的稳定性对其模型进行参数调优?

三水导电模型中模型参数的最优化确定--《中国地球物理学会第二十四届年会论文集》2008年
三水导电模型中模型参数的最优化确定
【摘要】:正三水导电模型一方面通过引入粘土水的胶结指数来考虑粘土的分布形态对岩石导电影响,使得模型能够解释粘土的附加导电性;另一方面通过引入微孔隙胶结指数来单独考虑微孔隙的导电,从而使得模型能够对各种类型的泥质砂岩做出合理的解释。对于饱含水的岩石,其表达式为:
【作者单位】:
【基金】:
【分类号】:P584【正文快照】:
三水导电模型一方面通过引人粘土水的胶结指数来考虑粘土的分布形态对岩石导电影响,使得模型能够解释粘土的附加导电性;另一方面通过引人微孔隙胶结指数来单独考虑微孔隙的导电,从而使得模型能够对各种类型的泥质砂岩做出合理的解释。对于饱含水的岩石,其表达式为: C0二衅
欢迎:、、)
支持CAJ、PDF文件格式,仅支持PDF格式
【引证文献】
中国期刊全文数据库
庄华;潘保芝;张丽华;韩雪;;[J];国外测井技术;2012年06期
【同被引文献】
中国期刊全文数据库
莫修文,贺铎华,李舟波,文新川,李桂荣;[J];长春科技大学学报;2001年01期
闫磊;潘保芝;莫修文;崔杰;;[J];吉林大学学报(地球科学版);2007年S1期
运华云,赵文杰,刘兵开,周灿灿,周凤鸣;[J];测井技术;2002年01期
张丽华;潘保芝;李宁;张冰;边会媛;韩雪;;[J];测井技术;2011年01期
张超谟;陈振标;张占松;李军;令狐松;孙宝佃;;[J];石油天然气学报;2007年04期
张奉东;潘保芝;;[J];世界地质;2009年02期
张丽华;潘保芝;李舟波;莫修文;夏志林;徐卫良;;[J];石油地球物理勘探;2010年03期
【相似文献】
中国期刊全文数据库
孟凡顺;冯庆付;杨祥瑞;;[J];石油地球物理勘探;2006年02期
吴兴能;刘瑞林;雷军;柳建华;信毅;韩能润;;[J];测井技术;2008年01期
王曰才;;[J];测井技术;1979年05期
张仙珍;[J];武汉交通科技大学学报;1994年03期
王聪;;[J];四川水力发电;2010年02期
张林;唐运涛;;[J];现代商贸工业;2010年11期
安振昌;;[J];地震地磁观测与研究;1984年05期
D.V.WM.A曾治权;;[J];地球物理学进展;1987年01期
景天永;;[J];地震地磁观测与研究;1990年02期
张金钟;;[J];图书与石油科技信息;1994年01期
中国重要会议论文全文数据库
黄布宙;李舟波;陶宏根;王宏建;李庆峰;许淑梅;张莹;毛毳;;[A];中国地球物理学会第二十四届年会论文集[C];2008年
王飞;潘保芝;;[A];中国地球物理·2009[C];2009年
李丽;陶果;戴世坤;;[A];2000年中国地球物理学会年刊——中国地球物理学会第十六届年会论文集[C];2000年
王多君;徐有生;Shun-ichiro K;[A];中国地球物理学会第22届年会论文集[C];2006年
代立东;李和平;;[A];中国矿物岩石地球化学学会第11届学术年会论文集[C];2007年
高平;母(?)昌;刘若新;马宝林;;[A];中国地震学会第四次学术大会论文摘要集[C];1992年
吴信宝;杨荫祖;;[A];1990年中国地球物理学会第六届学术年会论文集[C];1990年
柳江琳;白武明;孔祥儒;朱茂旭;;[A];1999年中国地球物理学会年刊——中国地球物理学会第十五届年会论文集[C];1999年
张莹;潘保芝;薛林福;黄布宙;;[A];中国地球物理学会第二十四届年会论文集[C];2008年
宋丽莉;葛洪魁;王宝善;;[A];中国地球物理学会第二十届年会论文集[C];2004年
中国重要报纸全文数据库
于德福;[N];中国矿业报;2003年
中国博士学位论文全文数据库
王多君;[D];中国科学院研究生院(地球化学研究所);2004年
代立东;[D];中国科学院研究生院(地球化学研究所);2006年
毛立峰;[D];成都理工大学;2007年
裴建新;[D];中国海洋大学;2007年
洪德成;[D];吉林大学;2009年
李壮;[D];哈尔滨工业大学;2007年
程希;[D];西北大学;2009年
吴丰收;[D];吉林大学;2009年
谭代明;[D];西南交通大学;2009年
方慧;[D];中国地质大学(北京);2005年
中国硕士学位论文全文数据库
陈杰;[D];西南石油学院;2005年
贾孟强;[D];中国石油大学;2009年
王飞;[D];吉林大学;2010年
谢小荣;[D];中南大学;2005年
张旗;[D];吉林大学;2005年
咸云尚;[D];河海大学;2006年
季锋;[D];中国地质大学;2007年
汪益宁;[D];中国地质大学(北京);2009年
汪进良;[D];中国地质科学院;2005年
程超;[D];西南石油学院;2005年
&快捷付款方式
&订购知网充值卡
400-819-9993
《中国学术期刊(光盘版)》电子杂志社有限公司
同方知网数字出版技术股份有限公司
地址:北京清华大学 84-48信箱 大众知识服务
出版物经营许可证 新出发京批字第直0595号
订购热线:400-819-82499
服务热线:010--
在线咨询:
传真:010-
京公网安备75号2224人阅读
Kaggle系列(4)
数据科学(24)
机器学习(18)
此处主要是如何利用GBDT以及如何进行调参,特征工程处理的比较简单。
特征工程:
City这个变量已经被我舍弃了,因为有太多种类了。DOB转为Age|DOB,舍弃了DOB创建了EMI_Loan_Submitted_Missing这个变量,当EMI_Loan_Submitted&变量值缺失时它的值为1,否则为0。然后舍弃了EMI_Loan_Submitted。EmployerName的值也太多了,我把它也舍弃了Existing_EMI的缺失值被填补为0(中位数),因为只有111个缺失值创建了Interest_Rate_Missing变量,类似于#3,当Interest_Rate有值时它的值为0,反之为1,原来的Interest_Rate变量被舍弃了Lead_Creation_Date也被舍弃了,因为对结果看起来没什么影响用Loan_Amount_Applied和&Loan_Tenure_Applied的中位数填补了缺失值创建了Loan_Amount_Submitted_Missing变量,当Loan_Amount_Submitted有缺失值时为1,反之为0,原本的Loan_Amount_Submitted变量被舍弃创建了Loan_Tenure_Submitted_Missing变量,当Loan_Tenure_Submitted有缺失值时为1,反之为0,原本的Loan_Tenure_Submitted变量被舍弃舍弃了LoggedIn,和Salary_Account创建了Processing_Fee_Missing变量,当Processing_Fee有缺失值时为1,反之为0,原本的Processing_Fee变量被舍弃Source-top保留了2个,其他组合成了不同的类别对一些变量采取了数值化和独热编码(One-Hot-Coding)操作
测试数据与训练数据合成
# 载入数据:
train_df = pd.read_csv('Train.csv',encoding = &ISO-8859-1&)
test_df = pd.read_csv('Test.csv',encoding = &ISO-8859-1&)
# train_df['source'] = 'train'
# test_df['source'] = 'test'
df = pd.concat([train_df,test_df],ignore_index=True)
XGBoost参数调节
min_ samples_split
定义了树中一个节点所需要用来分裂的最少样本数。
可以避免过度拟合(over-fitting)。如果用于分类的样本数太小,模型可能只适用于用来训练的样本的分类,而用较多的样本数则可以避免这个问题。
但是如果设定的值过大,就可能出现欠拟合现象(under-fitting)。因此我们可以用CV值(离散系数)考量调节效果。
min_ samples_leaf
定义了树中终点节点所需要的最少的样本数。
同样,它也可以用来防止过度拟合。
在不均等分类问题中(imbalanced class problems),一般这个参数需要被设定为较小的值,因为大部分少数类别(minority class)含有的样本都比较小。
min_ weight_ fraction_leaf
和上面min_ samples_ leaf很像,不同的是这里需要的是一个比例而不是绝对数值:终点节点所需的样本数占总样本数的比值。
#2和#3只需要定义一个就行了
max_ depth
定义了树的最大深度。
它也可以控制过度拟合,因为分类树越深就越可能过度拟合。
当然也应该用CV值检验。
max_ leaf_ nodes
定义了决定树里最多能有多少个终点节点。
这个属性有可能在上面max_ depth里就被定义了。比如深度为n的二叉树就有最多2^n个终点节点。
如果我们定义了max_ leaf_ nodes,GBM就会忽略前面的max_depth。
max_ features
决定了用于分类的特征数,是人为随机定义的。
根据经验一般选择总特征数的平方根就可以工作得很好了,但还是应该用不同的值尝试,最多可以尝试总特征数的30%-40%.
过多的分类特征可能也会导致过度拟合。
learning_ rate
这个参数决定着每一个决定树对于最终结果(步骤2.4)的影响。GBM设定了初始的权重值之后,每一次树分类都会更新这个值,而learning_ rate控制着每次更新的幅度。
一般来说这个值不应该设的比较大,因为较小的learning rate使得模型对不同的树更加稳健,就能更好地综合它们的结果。
n_ estimators
定义了需要使用到的决定树的数量(步骤2)
虽然GBM即使在有较多决定树时仍然能保持稳健,但还是可能发生过度拟合。所以也需要针对learning rate用CV值检验。
训练每个决定树所用到的子样本占总样本的比例,而对于子样本的选择是随机的。
用稍小于1的值能够使模型更稳健,因为这样减少了方差。
一把来说用~0.8就行了,更好的结果可以用调参获得。
指的是每一次节点分裂所要最小化的损失函数(loss function)
对于分类和回归模型可以有不同的值。一般来说不用更改,用默认值就可以了,除非你对它及它对模型的影响很清楚。
它影响了输出参数的起始化过程
如果我们有一个模型,它的输出结果会用来作为GBM模型的起始估计,这个时候就可以用init
random_ state
作为每次产生随机数的随机种子
使用随机种子对于调参过程是很重要的,因为如果我们每次都用不同的随机种子,即使参数值没变每次出来的结果也会不同,这样不利于比较不同模型的结果。
任一个随即样本都有可能导致过度拟合,可以用不同的随机样本建模来减少过度拟合的可能,但这样计算上也会昂贵很多,因而我们很少这样用
决定建模完成后对输出的打印方式:
0:不输出任何结果(默认)
1:打印特定区域的树的输出结果
&1:打印所有结果
warm_ start
这个参数的效果很有趣,有效地使用它可以省很多事
使用它我们就可以用一个建好的模型来训练额外的决定树,能节省大量的时间,对于高阶应用我们应该多多探索这个选项。
决定是否对数据进行预排序,可以使得树分裂地更快。
默认情况下是自动选择的,当然你可以对其更改
下面主要是针对每个参数进行调节:
train_x = train_df.values
train_y = train_y.values
param_test1 = {'n_estimators': range(20, 81, 10)}
gsearch = GridSearchCV(estimator=GradientBoostingClassifier(learning_rate=0.1,min_samples_split=500,min_samples_leaf=50,max_depth=8,
max_features='sqrt',subsample=0.8,random_state=10),param_grid=param_test1,
scoring='roc_auc',n_jobs=4,cv=5)
gsearch.fit(train_x,train_y)
print(gsearch.grid_scores_)
print(gsearch.best_params_,gsearch.best_score_)#({'n_estimators': 60}, 0.38968)
param_test2 = {'max_depth':range(5,16,2),'min_samples_split':range(200,)}
gsearch2 = GridSearchCV(estimator=GradientBoostingClassifier(learning_rate=0.1, n_estimators=60, max_features='sqrt', subsample=0.8, random_state=10),
param_grid=param_test2,scoring='roc_auc',n_jobs=4,iid=False,cv=5)
gsearch2.fit(train_x,train_y)
gsearch2.grid_scores_,gsearch2.best_params_,gsearch2.best_score_
然后调节min_samples_leaf可以测30,40,50,60,70这五个
#max_depth:9 min_samples_split:1000
#min_samples_split已经达到我们设定最大值可能比这个还大
param_test3 = {'min_samples_split': range(, 200), 'min_samples_leaf': range(30, 71, 10)}
#根下个参数一起调节
gsearch3 = GridSearchCV(
estimator=GradientBoostingClassifier(learning_rate=0.1, n_estimators=60, max_depth=9, max_features='sqrt',
subsample=0.8, random_state=10),
param_grid=param_test3, scoring='roc_auc', n_jobs=4, iid=False, cv=5)
#max_features
param_test4 = {'max_features': range(7, 20, 2)}
gsearch4 = GridSearchCV(
estimator=GradientBoostingClassifier(learning_rate=0.1, n_estimators=60, max_depth=9, min_samples_split=1200,
min_samples_leaf=60, subsample=0.8, random_state=10),
param_grid=param_test4, scoring='roc_auc', n_jobs=4, iid=False, cv=5)
#接下来就可以调节子样本占总样本的比例,我准备尝试这些值:0.6,0.7,0.75,0.8,0.85,0.9。
predictors = [x for x in train.columns if x not in [target, IDcol]]
gbm_tuned_1 = GradientBoostingClassifier(learning_rate=0.05, n_estimators=120,max_depth=9, min_samples_split=1200,min_samples_leaf=60, subsample=0.85, random_state=10, max_features=7)
modelfit(gbm_tuned_1, train, predictors)
我们主要先看下参数的定义:
好了,现在我们已经介绍了树参数和boosting参数,此外还有第三类参数,它们能影响到模型的总体功能:
调节方法很明显是交叉验证的方法,设置自己的得分函数scoring=?使得当前参数得分最高的那个参数
首先调节是:Boost特有的3个参数 learning-rate n_estimators 固定后调节树参数。最后调节subsample(0.8)
如果给出的输出是20,可能就要降低我们的learning rate到0.05,然后再搜索一遍。
否则如果输出太高我们就增加learning rate
树参数调节
调节max_depth和 num_samples_split
调节min_samples_leaf
调节max_features
优先调节max_depth和num_samples_split
而我们现在的CV值已经达到83.9了
比较之前的基线模型结果可以看出,现在我们的模型用了更多的特征,并且基线模型里少数特征的重要性评估值过高,分布偏斜明显,现在分布得更加均匀了。
最后调节max_features:sqrt(49)=7我们从7到19跑一下
最佳的是0.85经过测试
上面所有调节完毕以后,这样所有的参数都设定好了,现在我们要做的就是进一步减少learning rate,就相应地增加了树的数量。需要注意的是树的个数是被动改变的,可能不是最佳的,但也很合适。随着树个数的增加,找到最佳值和CV的计算量也会加大
下面调节learning-rate和树个数的过程按照http://blog.csdn.net/han_xiaoyang/article/details/思路
1.现在我们先把learning rate降一半,至0.05,这样树的个数就相应地加倍到120。
接下来我们把learning rate进一步减小到原值的十分之一,即0.01,相应地,树的个数变为600
3.继续把learning rate缩小至二十分之一,即0.005,这时候我们有1200个树此时得分没有升高。
4.排行得分稍微降低了,我们停止减少learning rate,只单方面增加树的个数,试试1500个树
排行得分已经从0.844升高到0.849了,这可是一个很大的提升。
还有一个技巧就是用“warm_start”选项这样每次用不同个数的树都不用重新开始
上面这些是一些基本探索过程。代码如下:
#-*-coding:utf-8-*-
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
#探测缺失值data.apply(lambda x: sum(x.isnull()))
#探测有多少个不同的取值
#缺失值太多1401直接舍弃
def processCity(df):
df.drop('City',axis=1,inplace=1)
#具体出生日期 算年龄
#DOB不要了
def processDOB(df):
df['Age'] = df['DOB'].map(lambda x:(117-int(x[-2:])))
df.drop('DOB',axis=1,inplace=True)
#EMI_LOAD_SUBMMIT 画出箱线图发现异常点和缺失值很多
#df['EMI_Loan_Submitted'].plot(kind='box')
def processEMI_load(df):
#判断isnull最后用pd
df['EMI_Loan_Submitted_Missing'] = df['EMI_Loan_Submitted'].map(lambda x:1 if pd.isnull(x) else 0)
df.drop('EMI_Loan_Submitted',axis=1,inplace=True)
#Employer_name的个数 len(df['Employer_Name'].value_counts())
def proceeEmploye_Name(df):
df['Employer_Len'] = df['Employer_Name'].map(lambda x:len(str(x)))
df.drop('Employer_Name',axis=1,inplace=True)
#Exisiting_EMI
def processExisting_EMI(df):
# means = df['Existing_EMI'].dropna().mean()
#但是这个显然没有的时候0更靠谱因为相当于不存在
df['Existing_EMI'].fillna(0,inplace=True)#就地修改不用复制
#Interest_Rate补充缺失值但是缺失值太多。84000+所以我们可以把这个属性看作有还是没有
def processInterest_Rate(df):
df['Interest_Rate_Missing'] = df['Interest_Rate'].map(lambda x:1 if pd.isnull(x) else 0)
df.drop('Interest_Rate',axis=1,inplace=True)#具体到每一行的那个值
#Lead_Creation_Date
def processLead_Creation_Date(df):
df.drop('Lead_Creation_Date',axis=1,inplace=True)
#Loan_Amount_Applied缺失值不是很多
#但是它的submit缺失值太多
def processLoan_Amount_Tenure_Applied(df):
df['Loan_Amount_Applied'].fillna(df['Loan_Amount_Applied'].median(), inplace=True)
df['Loan_Tenure_Applied'].fillna(df['Loan_Tenure_Applied'].median(), inplace=True)
df['Loan_Amount_Submitted_Missing'] = df['Loan_Amount_Submitted'].apply(lambda x: 1 if pd.isnull(x) else 0)
df['Loan_Tenure_Submitted_Missing'] = df['Loan_Tenure_Submitted'].apply(lambda x: 1 if pd.isnull(x) else 0)
df.drop(['Loan_Amount_Submitted','Loan_Tenure_Submitted'],axis=1,inplace=True)
def processLoggedln(df):
df.drop('LoggedIn',axis=1,inplace=True)
def processSalary_account(df):
#df['Salary_Account_id'] = pd.factorize(df['Salary_Account'])[0] + 1
df.drop('Salary_Account', axis=1, inplace=True)
def processFee(df):
df['Processing_Fee_Missing'] = df['Processing_Fee'].apply(lambda x: 1 if pd.isnull(x) else 0)
# 旧的字段不要了
df.drop('Processing_Fee', axis=1, inplace=True)
def processSource(df):
df['Source'] = df['Source'].map(lambda x:'other' if x not in ['S122','S133'] else x)
#类别属性编码成数值
def processEncoder(df):
var_to_encode = ['Device_Type', 'Filled_Form', 'Gender', 'Var1', 'Var2', 'Mobile_Verified', 'Source']
for col in var_to_encode:
df[col] = pd.factorize(df[col])[0]+1
#然后虚拟化
df = pd.concat([df,pd.get_dummies(df,columns=var_to_encode)],axis=1)
def dataprocess():
# 载入数据:
train_df = pd.read_csv('Train.csv',encoding = &ISO-8859-1&)
test_df = pd.read_csv('Test.csv',encoding = &ISO-8859-1&)
# train_df['source'] = 'train'
# test_df['source'] = 'test'
df = pd.concat([train_df,test_df],ignore_index=True)
df = processCity(df)
df = processDOB(df)
df = processEMI_load(df)
df = processExisting_EMI(df)
df = proceeEmploye_Name(df)
df = processFee(df)
df = processInterest_Rate(df)
df = processLead_Creation_Date(df)
df = processLoan_Amount_Tenure_Applied(df)
df = processLoggedln(df)
df = processSalary_account(df)
df = processSource(df)
df = processEncoder(df)
train_df = df.loc[train_df.index]
test_df = df.loc[test_df.index]
# train_df.drop('source',axis=1,inplace=True)
# test_df.drop(['source','Disbursed'],axis=1,inplace=True)
test_df.drop('Disbursed',axis=1,inplace=True)
train_df.to_csv('train_modified.csv',encoding='utf-8',index=False)
test_df.to_csv('test_modified.csv',encoding='utf-8', index=False)def turn_parameters(train_df,train_y):
#先看min_samples_split这个参数总样本0.5-%1 我们这里87000我们可以小于870
min_samples_split = 500
min_samples_leaf = 50#比较小的值这个是叶节点最小的样本数否则不会分裂成这个叶节点的防止过拟合
#定义了树的最大深度。防止过拟合
#估算方法: = 174 然后有多少个判断条件所以就是5-8。8的时候是256个节点都当作叶子节点
max_depth = 8 #5-8因为有49列
max_features = 'sqrt'
subsample = 0.8
train_x = train_df.values
train_y = train_y.values
param_test1 = {'n_estimators': range(20, 81, 10)}
gsearch = GridSearchCV(estimator=GradientBoostingClassifier(learning_rate=0.1,min_samples_split=500,min_samples_leaf=50,max_depth=8,
max_features='sqrt',subsample=0.8,random_state=10),param_grid=param_test1,
scoring='roc_auc',n_jobs=4,cv=5)
gsearch.fit(train_x,train_y)
print(gsearch.grid_scores_)
print(gsearch.best_params_,gsearch.best_score_)#({'n_estimators': 60}, 0.38968)
#如果给出的输出是20,可能就要降低我们的learning rate到0.05,然后再搜索一遍。
#如果输出值太高,比如100,因为调节其他参数需要很长时间,这时候可以把learniing rate稍微调高一点。
#开始调节树参数
param_test2 = {'max_depth':range(5,16,2),'min_samples_split':range(200,)}
gsearch2 = GridSearchCV(estimator=GradientBoostingClassifier(learning_rate=0.1, n_estimators=60, max_features='sqrt', subsample=0.8, random_state=10),
param_grid=param_test2,scoring='roc_auc',n_jobs=4,iid=False,cv=5)
gsearch2.fit(train_x,train_y)
gsearch2.grid_scores_,gsearch2.best_params_,gsearch2.best_score_
#max_depth:9 min_samples_split:1000
#min_samples_split已经达到我们设定最大值可能比这个还大
param_test3 = {'min_samples_split': range(, 200), 'min_samples_leaf': range(30, 71, 10)}
#根下个参数一起调节
gsearch3 = GridSearchCV(
estimator=GradientBoostingClassifier(learning_rate=0.1, n_estimators=60, max_depth=9, max_features='sqrt',
subsample=0.8, random_state=10),
param_grid=param_test3, scoring='roc_auc', n_jobs=4, iid=False, cv=5)
#设置为最佳参数
est = GradientBoostingClassifier(learning_rate=0.1,subsample=0.8,random_state=10,n_estimators=60)
param_test4 = {'max_depth':9,'min_samples_split':1200,'min_samples_leaf':60}
model_and_feature_Score(est,train_df,train_y,param_test4)
#max_features
param_test4 = {'max_features': range(7, 20, 2)}
gsearch4 = GridSearchCV(
estimator=GradientBoostingClassifier(learning_rate=0.1, n_estimators=60, max_depth=9, min_samples_split=1200,
min_samples_leaf=60, subsample=0.8, random_state=10),
param_grid=param_test4, scoring='roc_auc', n_jobs=4, iid=False, cv=5)
#最佳参数 min_samples_split:1200,min_samples_Leaf:60,max_depth:9,max_features:7
#subsamples
param_test5 = {'subsample': [0.6, 0.7, 0.75, 0.8, 0.85, 0.9]}
gsearch5 = GridSearchCV(
estimator=GradientBoostingClassifier(learning_rate=0.1, n_estimators=60, max_depth=9, min_samples_split=1200,
min_samples_leaf=60, subsample=0.8, random_state=10, max_features=7),
param_grid=param_test5, scoring='roc_auc', n_jobs=4, iid=False, cv=5)
# gsearch5.fit(train[predictors], train[target])
def model_and_feature_Score(clf,train_df,train_y,params,showFeatureImortance=True,cv_folds=5):
feature_list = train_df.columns.values
train_x = train_df.values
train_y = train_y.as_matrix()
clf.set_params(**params)
clf.fit(train_x,train_y)
train_predictions = clf.predict(train_x)#预测值
#针对分类问题
train_predprob = clf.predict_proba(train_x)[:,1]#预测的概率值第0列是为0的概率。第1列是预测为1概率
#展示交叉验证值
# if showCV:
cv_score = cross_val_score(clf,train_x,train_y,cv=cv_folds,scoring='roc_auc')
#cv_score = cross_val_score(clf, train_x, train_y, cv=cv_folds,scoring='roc_auc')
print(&\nModel Report&)
print(&Accuray: %.4g& %metrics.accuracy_score(train_y,train_predictions))
print(&AUC Score %f& %metrics.roc_auc_score(train_y,train_predprob))
#print(&CV Score : Mean - %.7g | Std - %.7g | Min - %.7g | Max - %.7g& % (np.mean(cv_score), np.std(cv_score), np.min(cv_score), np.max(cv_score)))
fi_threshold = 18
if showFeatureImortance:
feature_importance = clf.feature_importances_
feature_importance = (feature_importance/feature_importance.max())*100.0
import_index = np.where(feature_importance&fi_threshold)[0]
feat_imp = pd.Series(feature_importance[import_index],feature_list[import_index]).sort_values(ascending=True)[::-1]
feat_imp.plot(kind='bar',title='Feature importances')
plt.ylabel('Feature importance Score')
plt.show()
&&相关文章推荐
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:29234次
积分:1487
积分:1487
排名:千里之外
原创:124篇
(1)(6)(2)(4)(5)(5)(4)(3)(1)(2)(1)(4)(5)(10)(15)(12)(6)(6)(9)(2)(3)(7)(5)(9)
(window.slotbydup = window.slotbydup || []).push({
id: '4740881',
container: s,
size: '200,200',
display: 'inlay-fix'}

我要回帖

更多关于 足球 判断双方都进球 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信