英特尔® oneAPI 黑客松大赛

本文探讨了人工智能在电力能源、医疗和生物化学领域的应用,面临的挑战包括数据不完整性。通过介绍xgboost、CatBoost和LightGBM等模型的使用,展示了如何解决电压稳定性评估、心电图诊断和药物筛选等问题。
摘要由CSDN通过智能技术生成

1、背景介绍

    近年来,人工智能技术日新月异,创新成果赋能生物医学、材料、金融、气象等千行百业,人工智能技术引领的新一轮科技革命和产业变革浪潮,将成为未来世界经济和高端制造的主导技术,更会对中国现代化产业体系建设发挥无可替代的作用。        在实际应用中,如何针对具体问题和生产数据开展数据挖掘与建模分析具有非常大的挑战性。本方案从电力能源、医疗和化学领域的实际问题出发,基于AI4S的通用范式和模型提出问题解决方案,从而为科学发现和创新提供有益借鉴和思路。

2、问题与挑战

领域

问题

挑战

数据量

数据来源

电力能源

      电压失稳是电力系统安全的关键威胁,尤其在风力发电资源大规模并网的情况下。为了实现实时评估,基于数据驱动的电压稳定性评估方法被广泛的应用。

      实际环境中数据驱动模型的输入是不完整的。本场景中训练数据电压特征数量为3900,测试数据的电压特征则存在缺失,只有1170

2198

IEEE New England 10-machine 39-bus系统的电压稳定性数据

医疗

      心电图是临床最基础的一个检查项目,因为安全、便捷成为心脏病诊断的利器。每天都有大量的心电图诊断需求,但是全国范围内诊断心电图的专业医生数量不足,导致很多医院都面临专业心电图医生短缺的情况。

      临床标准12导联心电图数据为不规则时序数据。

1600

复旦大学附属中山医院和上海数创医疗科技有限公司联合提供的数据

生物化学

      在药物发现和开发领域,传统的实验方法非常耗时耗力,且不适用于大规模的药物筛选。人工智能的方法和技术可以极大地减少药物发现和开发过程中的资金和时间消耗。

      药物分子数据采用SMILES字符串表示,具有非结构化特点。

1513

BACE-1数据集

3 编程环境

4 建模范式

5 模型配置

6 结果展示

7 总结

1、AI for Science的问题复杂之一在于各种性质形态不同的的数据集,采取合适的数据挖掘手段和方法才能充分提取其中的关键信息。 2、机器学习中规范科学的建模范式同样适用于AI for Science。 3、在分类精度和效果上,xgboost等代表的梯度提升树明显比传统的机器学习算法有更明显的优势。

8 主要代码

# 定义模型训练函数
def model1(train,y,test):
    NFOLD = 5
    random_state = 2021
    KF = StratifiedKFold(n_splits=NFOLD, shuffle=True, random_state=random_state)
    predictions_cat = np.zeros(len(test))

    params_cat = {
        'iterations': 10000,
        'learning_rate':0.05,
        'eval_metric': 'AUC',
        'early_stopping_rounds':200,
        'use_best_model':True,
        'depth':10,
        'subsample':0.8,
        'random_state':random_state,
        'rsm':0.8,
        'bagging_temperature':0.8,
        'thread_count':-1}
    
    for fold_, (trn_idx, val_idx) in enumerate(KF.split(train,y)):
        print('----------------------- fold {} -----------------------'.format(str(fold_+1)))
        trn_data = Pool(train.iloc[trn_idx], y.iloc[trn_idx])
        val_data = Pool(train.iloc[val_idx], y.iloc[val_idx])
    
        clf_cat = CatBoostClassifier(**params_cat)  
        clf_cat.fit(trn_data,eval_set=val_data,verbose=100)
        
        predictions_cat[:] += (clf_cat.predict(test,prediction_type='Probability')[:,1] / NFOLD)
        
    return predictions_cat

def model2(train,y,test):
    NFOLD = 5
    random_state = 2021
    KF = StratifiedKFold(n_splits=NFOLD, shuffle=True, random_state=random_state)
    predictions_lgb = np.zeros(len(test))
    
    params_lgb = {
    'objective':'binary',
    'metric':'auc',
    'random_state':random_state,
    'learning_rate':0.05,
    'subsample':0.8,
    'max_depth':10,
    'bagging_freq':3,
    'colsample_bytree':0.8,
    'n_jobs':-1,
    'verbose':-1}
 
    for fold_, (trn_idx, val_idx) in enumerate(KF.split(train,y)):
        print('----------------------- fold {} -----------------------'.format(str(fold_+1)))
        trn_data = lgb.Dataset(train.iloc[trn_idx], label=y.iloc[trn_idx])
        val_data = lgb.Dataset(train.iloc[val_idx], label=y.iloc[val_idx]) 
    
        clf_lgb = lgb.train(params=params_lgb,
                            train_set=trn_data,
                            valid_sets=[trn_data, val_data],
                            valid_names=('train', 'val'),
                            num_boost_round=10000,
                            early_stopping_rounds=200,
                            verbose_eval=100)
        
        predictions_lgb[:] += (clf_lgb.predict(test,num_iteration=clf_lgb.best_iteration) / NFOLD)
        
    return predictions_lgb

def model3(train, y, test):
    NFOLD = 5
    random_state = 2021
    KF = StratifiedKFold(n_splits=NFOLD, shuffle=True, random_state=random_state)
    predictions_xgb = np.zeros(len(test))
    
    params_xgb = {'booster': 'gbtree', 
          'objective': 'reg:logistic',    
          'eval_metric': 'auc',
          'max_depth': 10,
          'subsample': 0.8,
          'colsample_bytree': 0.8,
          'tree_method':'hist',
          'seed': random_state,
          'nthread': -1,
          'eta':0.05}
    
    for fold_, (trn_idx, val_idx) in enumerate(KF.split(train,y)):
        print('----------------------- fold {} -----------------------'.format(str(fold_+1)))
        train_matrix = xgboost.DMatrix(train.iloc[trn_idx], label = y.iloc[trn_idx])
        valid_matrix = xgboost.DMatrix(train.iloc[val_idx], label = y.iloc[val_idx])
        test_matrix = xgboost.DMatrix(test)
        watchlist = [(train_matrix, 'train'),(valid_matrix, 'eval')]
        
        clf_xgb = xgboost.train(params_xgb, 
                              train_matrix, 
                              num_boost_round=10000, 
                              evals=watchlist, 
                              verbose_eval=100, 
                              early_stopping_rounds=200)
        
        predictions_xgb[:] += (clf_xgb.predict(test_matrix , ntree_limit=clf_xgb.best_ntree_limit) / NFOLD)
        
    return predictions_xgb 

def train_and_predict(train,y,test,model_name):
    random_state = 2021
    if model_name == 'Logistic Regression':
        model = LogisticRegression(random_state=random_state)
        model.fit(train, y)
        pred_y_proba = model.predict_proba(test)[:, 1]
    elif model_name == 'Bernoulli Naive Bayes':
        model = BernoulliNB()
        model.fit(train, y)
        pred_y_proba = model.predict_proba(test)[:, 1]
    elif model_name == 'Decision Tree':
        model = DecisionTreeClassifier(random_state=random_state)
        model.fit(train, y)
        pred_y_proba = model.predict_proba(test)[:, 1]
    elif model_name == 'K-Nearest Neighbor':
        model = KNeighborsClassifier(3)
        model.fit(train, y)
        pred_y_proba = model.predict_proba(test)[:, 1]
    elif model_name == 'Catboost':
        pred_y_proba = model1(train, y, test)
    elif model_name == 'Lightgbm':
        pred_y_proba = model2(train, y, test)
    else:
        pred_y_proba = model3(train, y, test) 
    return pred_y_proba
  • 9
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值