У меня есть набор данных, который имеет идентификатор полосы, положение и еще несколько атрибутов.Мне нужно построить мою модель, чтобы определить gauage_condition (0 - не согнут), 1 (согнут / испорчен).
| finish_mill_id | fm_exit-length | fm_exit_temp | position | grade | guage_condition |
|----------------|----------------|--------------|----------|-------|-----------------|
| EY123 | 1220.35 | 2300 | 1 | NY | 0 |
| EY123 | 1220.35 | 2350 | 2 | NY | 0 |
| EY123 | 1220.35 | 2357 | 3 | NY | 0 |
| EY123 | 1220.35 | 2365 | 500 | NY | 0 |
| EY223 | 1386 | 2312 | 1 | EY | 1 |
| EY223 | 1387 | 2311 | 3 | EY | 1 |
| EY223 | 1388.28 | 2364 | 100 | EY | 1 |
| EY223 | 1390 | 2377 | 500 | EY | 1 |
Положение варьируется от 0 до 500, и у меня есть все атрибуты (длина записи, температура и т. Д.), Которые различны в каждой позиции. Я построил модель, используя те же функции
stringIndexer = StringIndexer(inputCol="grade", outputCol="gradeIndex")
model = stringIndexer.fit(df)
indexed = model.transform(df)
encoder =OneHotEncoder(inputCol="gradeIndex", outputCol="grade_vector")
encoded_df = encoder.transform(indexed)
cols=encoded_df.columns
cols.remove("gauge_condition")
cols.remove("grade")
cols.remove("finish_mill_id")
cols.remove("cold_mill_id")
encoded_df.drop("finish_mill_id")
encoded_df.drop("cold_mill_id")
encoded_df=assembler.transform(encoded_df)
encoded_df.select("features").show(truncate=False)
standardscaler=StandardScaler().setInputCol("features").setOutputCol("Scaled_features")
encoded_df=standardscaler.fit(encoded_df).transform(encoded_df)
У меня естьмоя модель здесь
gbt = GBTClassifier(labelCol="gauge_condition",
featuresCol='Scaled_features',maxIter=100)
model=gbt.fit(train)
gbt_predict_train=model.transform(train)
gbt_predict_test=model.transform(test)
Но я хочу, чтобы мне нужно было прогнозировать на уровне полосы, но здесь я получаю прогноз на каждой позиции.Я также не могу использовать позицию как горячее кодирование One, и я попытался повернуть и представить все атрибуты как функцию позиции, которая оказалась в огромных 2000 столбцах, что не имеет смысла
Если я попытаюсь сгруппировать после быстрого прогнозированияи грязный способ, как я могу сделать свою оценку.Если есть какой-либо лучший подход, пожалуйста, предложите