我正在开发一个基于土壤pH值耐受范围的最佳作物匹配的机器学习模型。输入值在某个范围内,例如(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)
请建议哪种算法最适合当前问题。
回答:
如果您想预测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 high0 5.0 6.51 5.5 6.52 5.5 7.03 5.5 7.54 6.0 6.75 5.5 7.56 5.5 7.0
下一步是将训练和测试数据输入到您决定使用的分类器中(例如RandomForestClassifier),并使用通过将数据分成train
和test
得到的X_test
进行预测:
from sklearn.model_selection import train_test_splity = df.Crop.valuesX = X_df.values# Split in train and testX_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3)# Fit the classifierrf = RandomForestClassifier()model = rf.fit(X_train, y_train)# Predict using X_testy_pred = model.predict(X_test)
这将给您类似于下面的结果:
print(y_pred)array(['Carrot', 'Carrot', 'Cauliflower'], dtype=object)
最后,检查您使用定义的模型获得的准确率。为此,您可以使用accuracy_score
:
from sklearn.metrics import accuracy_scoreaccuracy_score(y_test, y_pred, normalize=False)