改装运行
这是我的界面:
lgb_train = lgb.Dataset(X_train, y_train)
lgb_eval = lgb.Dataset(X_test, y_test, reference=lgb_train)
params = {
'task':'train',
'boosting':'gbdt',
'objective':'binary',
'metric':{'l2', 'auc'},
'num_leaves': 62,
'learning_rate': 0.05,
'feature_fraction': 0.9,
'bagging_fraction': 0.8,
'bagging_freq': 5,
'verbose': 20
}
gbm = lgb.train(params,
lgb_train,
num_boost_round=250,
valid_sets=lgb_eval)
print('Start predicting...')
y_pred = gbm.predict(X_test, num_iteration=gbm.best_iteration)
y_pred = np.round(y_pred)
print gbm.feature_importance()
这是我运行它的地方:
@GET("solicitation/all")
Observable<SolicitationResponse> getAll(@Query("X-Authorization") String apiKey);
1)如果我们有互联网连接,如何才能添加条件?
这不起作用:
apiService.getAll(getResources().getString(R.string.api_key))
.subscribeOn(Schedulers.io())
.flatMapIterable(SolicitationResponse::getData)
.observeOn(AndroidSchedulers.mainThread())
.delay(5L, java.util.concurrent.TimeUnit.SECONDS) // THIS DOESN'T WORK LIKE I WANT IT TO..
.repeat()
.subscribe(s -> Log.e(TAG, "data: " + s.getName()));
为什么呢?因为条件代码不会无休止地运行,这意味着它只会检查我们是否有一次互联网连接,如果我们失去它就会崩溃。
在运行getAll方法之前有没有办法添加条件?
2)我需要在任务之前或之后添加一个间隔,通过插入if (NetworkUtils.isConnected()) {
//observable above here
}
它会延迟订阅,这不是我想要或需要的。如何在这种特殊情况下完成它?
答案 0 :(得分:1)
这是一个建议:
Observable.fromCallable(() -> NetworkUtils.isConnected())
.flatMap(isConnected -> {
if (isConnected) {
return apiService.getAll(getResources().getString(R.string.api_key))
.subscribeOn(Schedulers.io())
.flatMapIterable(SolicitationResponse::getData);
} else {
return Observable.empty();
}
})
.subscribeOn(Schedulers.io())
.observeOn(Schedulers.immediate())
.repeatWhen(observable -> observable.delay(5, TimeUnit.SECONDS))
.subscribe(s -> Log.e(TAG, "data: " + s.getName()));
1)最直接的方法是将网络检查添加到流中,并使用flatMap()有条件地决定要做什么。
2)在使用具有所需值的delaySubscription()
之前添加延迟之前,但是第一次也会发生延迟,所以在这里添加延迟的第二种方法似乎更合适,并且可以使用repeatWhen()