我使用Python的Scikit-learn
库编写了一个简单的线性回归和决策树分类器代码,用于预测结果。它运作良好。
我的问题是,是否有一种方法可以反向执行此操作,以根据估算结果(参数,精度最高的参数)来预测参数值的最佳组合。
或者我可以这样问,是否存在可以基于一个(或多个)预测多个结果的分类,回归或其他某种类型的算法(决策树,SVM,KNN,逻辑回归,线性回归,多项式回归...) ) 参数?
我试图通过放入多变量结果来做到这一点,但它显示了错误:
这是我为回归编写的代码:
import pandas as pd
from sklearn import linear_model
from sklearn import tree
dic = {'par_1': [10, 30, 13, 19, 25, 33, 23],
'par_2': [1, 3, 1, 2, 3, 3, 2],
'outcome': [101, 905, 182, 268, 646, 624, 465]}
df = pd.DataFrame(dic)
variables = df.iloc[:,:-1]
results = df.iloc[:,-1]
regression = linear_model.LinearRegression()
regression.fit(variables, results)
input_values = [14, 2]
prediction = regression.predict([input_values])
prediction = round(prediction[0], 2)
print(prediction)
这是我为决策树编写的代码:
dic = {'par_1': [10, 30, 13, 19, 25, 33, 23],
'par_2': [1, 3, 1, 2, 3, 3, 2],
'outcome': ['yes', 'yes', 'no', 'yes', 'no', 'no', 'yes']}
df = pd.DataFrame(dic)
variables = df.iloc[:,:-1]
results = df.iloc[:,-1]
decision_tree = tree.DecisionTreeClassifier()
decision_tree.fit(variables, results)
input_values = [18, 2]
prediction = decision_tree.predict([input_values])[0]
print(prediction)
最佳答案
如@Justas所述,如果要找到输入变量的最佳组合,其输出变量将为max/min,则这是一个优化问题。
scipy中提供了相当多的非线性优化器,或者您可以使用元启发式算法,例如遗传算法,模因算法等。
另一方面,如果您的目标是学习逆函数,该函数将输出变量映射到一组输入变量,则转到MultiOuputRegresssor或MultiOutputClassifier。两者都可以用作任何基础估计量的包装,例如linearRegression,LogisticRegresssion,KNN,DecisionTree,SVM等。
例子:
import pandas as pd
from sklearn.multioutput import MultiOutputRegressor, RegressorChain
from sklearn.linear_model import LinearRegression
dic = {'par_1': [10, 30, 13, 19, 25, 33, 23],
'par_2': [1, 3, 1, 2, 3, 3, 2],
'outcome': [101, 905, 182, 268, 646, 624, 465]}
df = pd.DataFrame(dic)
variables = df.iloc[:,:-1]
results = df.iloc[:,-1]
multi_output_reg = MultiOutputRegressor(LinearRegression())
multi_output_reg.fit(results.values.reshape(-1, 1),variables)
multi_output_reg.predict([[100]])
# array([[12.43124217, 1.12571947]])
# sounds sensible according to the training data
#if input variables needs to be treated as categories,
# go for multiOutputClassifier
from sklearn.multioutput import MultiOutputClassifier
from sklearn.linear_model import LogisticRegression
multi_output_clf = MultiOutputClassifier(LogisticRegression(solver='lbfgs'))
multi_output_clf.fit(results.values.reshape(-1, 1),variables)
multi_output_clf.predict([[100]])
# array([[10, 1]])
在大多数情况下,找到输入变量值之一可以帮助预测其他变量。此方法可以通过ClassifierChain或RegressorChain来实现。
要了解ClassifierChain的优势,请参阅this示例。
更新:
dic = {'par_1': [10, 30, 13, 19, 25, 33, 23],
'par_2': [1, 3, 1, 2, 3, 3, 2],
'outcome': [0, 1, 1, 1, 1, 1 , 0]}
df = pd.DataFrame(dic)
variables = df.iloc[:,:-1]
results = df.iloc[:,-1]
multi_output_clf = MultiOutputClassifier(LogisticRegression(solver='lbfgs',
multi_class='ovr'))
multi_output_clf.fit(results.values.reshape(-1, 1),variables)
multi_output_clf.predict([[1]])
# array([[13, 3]])
关于python - 使用Python使用一个(或多个)参数进行多输出回归或分类,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/56510287/