Как я могу построить модель классификации на сгруппированном наборе данных - PullRequest
0 голосов
/ 28 июня 2019

У меня есть набор данных, который имеет идентификатор полосы, положение и еще несколько атрибутов.Мне нужно построить мою модель, чтобы определить 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 столбцах, что не имеет смысла

Если я попытаюсь сгруппировать после быстрого прогнозированияи грязный способ, как я могу сделать свою оценку.Если есть какой-либо лучший подход, пожалуйста, предложите

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...