Выбор алгоритма машинного обучения для входных значений, присутствующих в диапазоне - PullRequest
0 голосов
/ 29 декабря 2018

Я разрабатываю модель машинного обучения для наиболее подходящих сельскохозяйственных культур, основанную на значениях толерантности к рН почвы.Входные значения, которые присутствуют в диапазоне, такие как (5.0-6.0) и значения нескольких обрезок, лежат в одном значении диапазона.например

------      ---------  
Crop        pH-values 
------      ---------
Apple       (5.0-6.5)
Basil       (5.5-6.5)
Carrot      (5.5-7.0)
Cauliflower (5.5-7.5)
Chervil     (6.0-6.7)
Corn        (5.5-7.5.)
Cucumber    (5.5-7.0)

Пожалуйста, предложите, какой алгоритм лучше всего подходит для текущей задачи.

1 Ответ

0 голосов
/ 29 декабря 2018

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


  • Вот краткий набросок о том, как действовать

Во-первых, вам придется выполнить некоторую предварительную обработку.Вы можете начать с извлечения информации из нижних верхних границ из диапазонов pH-values, например, вы могли бы сделать:

s = df['pH-values'].str.strip('(&)').str.split('-')
X_df = pd.DataFrame(s.values.tolist(), columns = ['low','high'])
X_df['high'] = X_df.high.str.rstrip('.').astype(float)
X_df['low'] = X_df.low.astype(float)
print(X_df)

   low  high
0  5.0   6.5
1  5.5   6.5
2  5.5   7.0
3  5.5   7.5
4  6.0   6.7
5  5.5   7.5
6  5.5   7.0

Следующим шагом будет подача данных поезда и испытаний вс любым классификатором, с которым вы решили работать (например, RandomForestClassifier ), и прогнозируйте некоторые тестовые данные X_test, полученные путем разделения ваших данных на train и test`:

from sklearn.model_selection import train_test_split
y = df.Crop.values
X = X_df.values

# Split in train and test
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3)

# Fit the classifier
rf = RandomForestClassifier()
model  = rf.fit(X_train, y_train)

# Predict using X_test
y_pred = model.predict(X_test)

Что даст вам что-то вроде:

print(y_pred)
array(['Carrot', 'Carrot', 'Cauliflower'], dtype=object)

И, наконец, проверьте точность, которую вы получите с определенной моделью.Для этого вы можете использовать accuracy_score:

from sklearn.metrics import accuracy_score
accuracy_score(y_test, y_pred, normalize=False)
...