赛题介绍

比赛链接:
https://tianchi.aliyun.com/competition/introduction.htm?spm=5176.100150.711.8.5f712784mldsqp&raceId=231646

在天文学中,光谱描述了天体的辐射特性,以不同波长处辐射强度的分布来表示。每条观测得到的光谱主要是由黑体辐射产生的连续谱、天体中元素的原子能级跃迁产生的特征谱线(吸收线、发射线)以及噪声组成。通常天文学家依据光谱的特征谱线和物理参数等来判定天体的类型。在目前的LAMOST巡天数据发布中,光谱主要被分为恒星、星系、类星体和未知天体四大类。 LAMOST数据集中的每一条光谱提供了3690-9100埃的波长范围内的一系列辐射强度值。光谱自动分类就是要从上千维的光谱数据中选择和提取对分类识别最有效的特征来构建特征空间,例如选择特定波长或波段上的光谱流量值等作为特征,并运用算法对各种天体进行区分。

本次大赛旨在通过机器学习算法对LAMOST DR3光谱进行自动分类(STAR/GALAXY/QSO/UNKNOWN),参赛选手需要设计高效高准确率的算法来解决这个天文学研究中的实际问题。

竞赛数据

赛题数据包括索引文件(index.csv)和波段文件(id.txt集合的zip)两部分:

1)索引文件的第一行是字段名,之后每一行代表一个天体。索引文件的第一个字段为波段文件id号。训练集的索引文件记录了波段文件id号以及分类信息,测试集的索引文件记录了波段文件id号,需要预测分类信息。

2)波段文件是txt后缀的文本文件,存储的是已经插值采样好的波段数据,以逗号分隔。所有波段文件的波段区间和采样点都相同,采样点个数都是2600个。

3)带 train 为训练集;带 test 为第一阶段测试集;带 rank 为第二阶段测试集。

Unknown数据补充说明:
1)LAMOST数据集中的unknown类别是由于光谱质量(信噪比低)等原因,未能够给出确切的分类的天体;
2)Unknown分类目前由程序给出,其中不排除有恒星、星系和类星体。

数据预处理

每个样本的特征分布在各个文件中,无法直接使用模型。
一开始想用python的pandas进行特征的聚合,碰到两个问题:
1. 速度太慢
2. 内存占用太大

针对速度问题:该用java读区并处理数据
针对内存问题:并不将所有数据写到一个文件中,而是拆分几个特征文件。

def readTotalFeature(fileName, maxFileIndex, hasLabel=True, partition = 20, ewFeature=True, rawFeature=True, addQsoFeature=True, doScale=True):total_train_feature = pd.DataFrame()for i in range(0, maxFileIndex+1):train_set = pd.read_csv(fileName + str(i) +'.csv', header=None)renameCol = {0:'id'}if hasLabel:renameCol[train_set.shape[1]-1] = 'label'train_set.rename(columns=renameCol, inplace=True)if hasLabel:processed_train = pd.DataFrame()rawFeature = train_set.iloc[:,1:-1]else:rawFeature = train_set.iloc[:,1:]if doScale:rawFeature =  pd.DataFrame(scale(rawFeature, axis=1))processed_train = extractFeature(rawFeature, partition, levelFeature=False, smooth=False)if ewFeature:rangeList = [(0,300), (0, 500), (500, 1000),(850, 1000), (1000, 1300),(1500,2000), (1500, 2600), (2500, 2600)]ew_feature = EWByRangeList(rawFeature, rangeList, filterThrehold=0.5)processed_train = pd.concat([processed_train, ew_feature], axis=1)if addQsoFeature:qso_feature = qsoFeature(rawFeature)processed_train = pd.concat([processed_train, qso_feature], axis=1)if hasLabel:processed_train['label'] = train_set.labelelse:processed_train['id'] = train_set.idtotal_train_feature = total_train_feature.append(processed_train, ignore_index=True)return total_train_feature.sample(total_train_feature.shape[0], replace=False)

特征工程

特征提取:

def extractFeature(train_feature, partition=2, randomPartion=False, prefix="p", onlyAvg=False, filterLow=False, levelFeature=False,  smooth=False):if smooth:train_feature = train_feature.rolling(100, axis=1).mean()if filterLow:train_feature[train_feature<1] = 0plen = train_feature.shape[1]/partitionfeatures = pd.DataFrame()avgs = pd.DataFrame()for i in range(0, partition):pstart = random.randint(0, train_feature.shape[1]-plen-1)pendExclue = pstart + plen + 1avgC = train_feature.iloc[:, pstart:pendExclue].mean(axis=1)stdC = train_feature.iloc[:, pstart:pendExclue].std(axis=1)maxC = train_feature.iloc[:, pstart:pendExclue].max(axis=1)minC = train_feature.iloc[:, pstart:pendExclue].min(axis=1)medianC = train_feature.iloc[:, pstart:pendExclue].median(axis=1)diffC = train_feature.iloc[:, pstart:pendExclue].diff(axis=1).iloc[:,1:]features[prefix+'_avg'+str(i)] = avgCavgs[prefix+'_avg'+str(i)] = avgCif onlyAvg==False:features[prefix+'_std'+str(i)] = stdCfeatures[prefix+'_median'+str(i)] = medianCfeatures[prefix+'_max'+str(i)] = maxCfeatures[prefix+'_min'+str(i)] = minCfeatures[prefix+'_avg_m_std'+str(i)] = stdC/avgCfeatures[prefix+'_max_m_avg'+str(i)] = maxC/avgCfeatures[prefix+'_min_m_avg'+str(i)] = minC/avgCif levelFeature:level_feature = extractFeature(avgs, prefix="l", partition = 4)features = pd.concat([features, level_feature], axis = 1)return features.fillna(0)

训练集和测试集合拆分

X = total_train_feature.iloc[:,:-1]
Y = total_train_feature.iloc[:,-1]# Split the dataset in two equal parts
x, t_x, y, t_y = train_test_split(X, Y, test_size=0.3, random_state=0)

异常值处理:

def outlier_rejection(X, y):model = IsolationForest(n_jobs=-1, random_state=rng)model.fit(X)y_pred = model.predict(X)return X[y_pred == 1], y[y_pred == 1]

PCA
SMOTE
特征筛选

smote = SMOTE()
anova_filter = SelectKBest(f_classif, k=(int)(x.shape[1]*0.6))
model = RandomForestClassifier(n_jobs=4, class_weight='balanced', max_depth=70,  verbose=1,random_state=rng)
# model = AdaBoostClassifier(random_state=rng)
# model = GradientBoostingClassifier(random_state=rng,verbose=1)
# model = XGBClassifier()
# model = KNeighborsClassifier(n_neighbors = 3, n_jobs=-1)
scaler = StandardScaler()
clf = ImPineline([
#     ('anova', anova_filter),('scaler',scaler),('smote',smote),('model', model)
])

模型

model = RandomForestClassifier(n_jobs=4, class_weight='balanced', max_depth=70,  verbose=1,random_state=rng)

调优

利用skitlearn的GridSearchCV 进行参数调优秀

if validMode:smote = SMOTE()parameters = {'max_depth':[60, 70, 80],  #70'max_features':[0.5,0.6,0.7], #0.6#     'min_samples_split':[2, 4, 8, 20], #2#     'min_samples_leaf':[1,4,8,20], #1#     'min_weight_fraction_leaf':[0,0.05,0.1,0.2], #0'max_leaf_nodes':[800, 1000, 1200], #1000#      'bootstrap':[True, False], #False#     'oob_score':[True, False], #False#     'class_weight':[None,'balanced'], #balanced'n_estimators':[10, 20], #10#     'criterion':['gini','entropy']}clf = GridSearchCV(RandomForestClassifier(n_jobs=4, max_depth=20), parameters, cv=5,scoring='f1_macro', n_jobs=8, verbose=2)clf.fit(x, y)print(clf.best_params_)means = clf.cv_results_['mean_test_score']stds = clf.cv_results_['std_test_score']for mean, std, params in zip(means, stds, clf.cv_results_['params']):print("%0.3f (+/-%0.03f) for %r" % (mean, std * 2, params))

结果和展望

排名:83/843

天池大数据比赛-天体分类总结相关推荐

  1. kaggle和天池大数据比赛的区别

    kaggle和天池大数据的比赛给我的感觉完全不一样,天池上面的比赛给我感觉更像一场考试,大家都是自己埋头做自己的东西交流很少,以拟合线上验证集为最大的目标.kaggle上的比赛给人感觉更像一场交流分享 ...

  2. 天池大数据比赛-菜鸟仓库比赛-第二赛季记录

    统计全国仓库预测的前两周 商品_仓库_个数 rm(list=ls()) w=read.table("F:/笔记学习/天池比赛/菜鸟需求预测与分仓规划/data2/item_feature2. ...

  3. 天池大数据比赛-菜鸟仓库比赛-第一赛季记录

    赛题说明链接 http://download.csdn.net/detail/q383700092/9538252 R语言  1379640 918539  2021961 1365166   5个 ...

  4. 天池大数据比赛,菜鸟仓库比赛,御膳房操作

    御膳房--操作 表名 描述 来源 所属包 所属项目 操作 item_feature 商品粒度相关特征 天池 查看包 tianchi_data (tianchi_data) 已授权 config     ...

  5. 阿里天池大数据竞赛——口碑商家客流量预测 A2

    阿里天池大赛koubeiyuce1 2017年二月份,天池大数据比赛,口碑商家客流量预测,参赛地址及详情: https://tianchi.shuju.aliyun.com/competition/i ...

  6. AI比赛-NER:“万创杯”中医药天池大数据竞赛——中药说明书实体识别挑战

    大赛概况 疫情催化下,人工智能正在持续助力中医药传承创新加速发展,其中中医用药知识体系沉淀挖掘是一个基础工作.通过挖掘中药说明书构建中药合理用药的知识图谱,将为中医规范诊疗奠定较好基础.挑战旨在通过抽 ...

  7. 阿里巴巴天池大数据竞赛黄金联赛全面开战,全球同步报名,只为寻找最聪明的你!...

    阿里巴巴天池大数据竞赛黄金联赛全面开战,全球同步报名,只为寻找最聪明的你!          天池大数据竞赛是由阿里巴巴集团主办,面向全球新生代力量的高端算法竞赛.通过开放海量数据和"天池& ...

  8. 天池大数据竞赛第一名,上海交通大学人工智能实验室如何用AI定位肺结节

    癌症,犹如黑暗中的魔鬼,带给人们恐惧与绝望.而肺癌,在我国作为发病率.死亡率最高的一类癌症,伤害着无数家庭.在我国每年都有近60万人死于肺癌.然而,癌症的死亡率与首次发现癌症的时期紧密相关,早期肺结节 ...

  9. 外文文献下载网站;数据获取网站;中文文献下载网站;论文原创性保真网站;外包项目申请网站;大数据比赛收录网站;提高编程能力;代码分享网站

    外文文献 名称:IEEE 简介:世界上最大的技术专业组织,180多本高质量期刊 网址:https://www.ieee.org/ 名称:Sci-Hub | Effective Data Cluster ...

最新文章

  1. 真分数c语言,C语言列出真分数序列代码及解析
  2. 扯谈spring mvc之WebApplicationContext的继承关系
  3. 中间人攻击框架以及工具,中国寒龙出品欢迎下载!~
  4. [Python语音识别项目笔记] 3softmax函数
  5. JavaScript基于对象编程
  6. JeecgBoot 2.4.3版本发布,企业级低代码平台
  7. Python机器学习:SVM008SVM思想解决回归问题
  8. .net excel导入mysql_.NET Core使用NPOI将Excel中的数据批量导入到MySQL - 追逐时光者 - 博客园...
  9. 消息人士:苹果正与比亚迪宁德时代洽谈电动汽车电池供应事宜
  10. 一文概述深度学习中的正则化(含Python代码)
  11. 汇编语言程序设计-钱晓捷(第五版)学习笔记目录
  12. .net VB中字符串按照换行符号俩来进行分割
  13. 蓦然回首,已然踏上编程路
  14. 【Unity3D开发小游戏】《超级马里奥》游戏教程
  15. 便宜制作服务器,组建私有云:除了购买NAS服务器外试试自己手工打造吧!
  16. 增量迭代模型,瀑布模型,螺旋模型,快速原型模型
  17. 常用算法简要总结(C语言)
  18. Hilbert曲线介绍以及代码实现
  19. 台式电脑组装的步骤~~~~·
  20. java-net-php-python-jspm光影婚纱影楼系统设计与实现系统计算机毕业设计程序

热门文章

  1. SQLite源码编译教程
  2. Tomcat 启动速度慢,一直转圈的原因
  3. [IOS][已越狱]配合网易云音乐,使用Bridge快速免iTunes导入音乐到“音乐”
  4. android 更改主题,如何更改android app的颜色主题?
  5. 缩放图片至固定大小,尺寸不足以0填充
  6. 全文 40000 字,最强(全) Matplotlib 实操指南
  7. 创意小发明:使用51系列单片机的DIY点焊机控制项目(程序+原理图)
  8. 实验六:熟悉Hive的基本操作
  9. Android -- 广播
  10. 新浪微博热搜榜“背后的男人”讲述热搜背后的秘密