Je pense qu'il ne reste plus beaucoup de gens qui n'ont pas entendu parler des hackathons et des concours de science des données. J'en ai entendu parler il y a six mois. Participant à tout ce que j'ai vu (et même gagner quelque chose), je ne pouvais pas passer par AgroCode 2020, organisé par la Banque agricole russe. J'ai réussi à me classer parmi les meilleurs participants dans plusieurs directions, et dans un sens j'ai même remporté un prix. Grâce à ces réalisations, je suis devenu un spécialiste de la science des données au Centre pour le développement des technologies financières de la Banque agricole de Russie. Et comment je l'ai fait - lisez ci-dessous.
Le principal agro-codage du pays
Pour commencer, je dirai quelques mots sur l'événement lui-même. AgroCode 2020 a rassemblé de nombreuses personnes qui ne sont pas indifférentes aux nouvelles technologies en agriculture. Il se composait de plusieurs activités:
Concours d'analyse de données Agro Data Science Cup avec 2 tâches:
.
Agro Hack 6 :
.
, , . 10 .
Agro Idea, .
, , . , , , . . DS- . -10, - 2 !
. 17 .
?
: , ID , , ( ) 365 .
F1- sklearn ( average="weighted").
, . : , . .
? ?
, , NDVI —
, 4 : RGB . , RED — , NIR — .
?
-, 45 , 279 . : - , () , .
-, , - ( - ). , .
-, . , , . .
. , , . - , , . , .
… , , . , . .
ID, . . - . . : 2 4 .
?
, . - KFold StratifiedKFold , . . , . , . -. .
, , CatBoost. , , , :
params = {
'iterations': 2000,
'depth': 6,
'early_stopping_rounds': 500,
'l2_leaf_reg': 5,
'bagging_temperature': 1,
'random_seed': 17,
'class_names': classes,
'auto_class_weights': 'Balanced',
'eval_metric': 'TotalF1',
'loss_function': 'MultiClassOneVsAll',
'task_type': 'GPU',
'devices': '0:1',
'verbose': 2000
}
“Balanced” “MultiClassOneVsAll”. . . , , , random_seed . - . , , . , , .
18 . , , . , 18 2 . , - . — .
: . . , , , .
( ) . , .
. — 1056 1056 .jpg. . , , . . : https://www.kaggle.com/maciejadamiak/lemons-quality-controldataset
ROC-AUC. :
def score(y_true, y_preds):
table = y_true.merge(y_preds, left_on='image_id', right_on='image_id')
m = keras.metrics.AUC(curve='ROC')
m.update_state(table.iloc[:, 1:10], table.iloc[:, 10:])
return m.result().numpy()
.
csv-. .py , -. , . , .
20 . , . ? .
, , . , . , , , , .
. , .
aug = ImageDataGenerator(
rotation_range=40,
width_shift_range=0.1,
height_shift_range=0.1,
brightness_range=[0.5, 1],
shear_range=0.2,
channel_shift_range=0.2,
zoom_range=0.2,
horizontal_flip=True,
vertical_flip=True,
fill_mode="nearest"
)
?
, . backbone VGG16, AveragePooling, (Dense) Dropout.
model = VGG16(weights=None, include_top=False, input_shape=[image_size, image_size, 3])
x = AveragePooling2D(pool_size=(2, 2))(model.output)
x = Flatten()(x)
x = Dense(256, activation='relu')(x)
x = Dropout(0.5)(x)
output = Dense(9, activation='sigmoid')(x)
, , .
KFold -. , , .
9 , .
. “ ” . , . .
:
, , .
– .
( , , , ..).
5 , , , .
3 . .
: -.
, , , .
, :
, 19 30 , 23 25 . .
. , .
- . , .
7.
, . . , . :
: - , - , - ( ).
-? . , , . , , — . :
?
, , , . , , Agro Hack :) ( , ).
, ? - , ! , .
!
, , , , , , .