gpt4 book ai didi

python - 具有一个(或多个)参数的 Python 多输出回归或分类器

转载 作者:太空狗 更新时间:2023-10-29 21:48:04 34 4
gpt4 key购买 nike

我使用 Python 的 Scikit-learn 库编写了一个简单的线性回归和决策树分类器代码来预测结果。它运行良好。

我的问题是,有没有一种方法可以反向执行此操作,以根据推算结果(准确度最高的参数)预测参数值的最佳组合。

或者我可以这样问,是否有分类、回归或其他类型的算法(决策树、SVM、KNN、逻辑回归、线性回归、多项式回归...)可以基于一个结果预测多个结果(或更多)参数?

我尝试通过放置多变量结果来做到这一点,但它显示错误:

ValueError: Expected 2D array, got 1D array instead: array=[101 905 182 268 646 624 465]. Reshape your data either using array.reshape(-1, 1) if your data has a single feature or array.reshape(1, -1) if it contains a single sample.

这是我为回归编写的代码:

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 所提到的,如果您想找到输出变量为最大/最小的输入值的最佳组合,那么这是一个优化问题。

scipy 中有相当多的非线性优化器可用或者您可以使用元启发式算法,例如遗传算法、模因算法等。

另一方面,如果您的目标是学习反函数,它将输出变量映射到一组输入变量,那么就去寻找 MultiOuputRegresssorMultiOutputClassifier .它们都可以用作任何基本估计器之上的包装器,例如 linearRegression、LogisticRegression、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/

34 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com