我尝试从TestDome回答此question,并得到250877.19298245612而不是建议的250000。请让我出了什么问题。谢谢
import numpy as np
from sklearn import linear_model
class MarketingCosts:
# param marketing_expenditure list. Expenditure for each previous campaign.
# param units_sold list. The number of units sold for each previous campaign.
# param desired_units_sold int. Target number of units to sell in the new campaign.
# returns float. Required amount of money to be invested.
@staticmethod
def desired_marketing_expenditure(marketing_expenditure, units_sold, desired_units_sold):
X = [[i] for i in units_sold]
reg = linear_model.LinearRegression()
reg.fit(X, marketing_expenditure)
return float(reg.predict(desired_units_sold))
#For example, with the parameters below the function should return 250000.0.
print(MarketingCosts.desired_marketing_expenditure(
[300000, 200000, 400000, 300000, 100000],
[60000, 50000, 90000, 80000, 30000],
60000))
答案 0 :(得分:1)
import numpy as np
from sklearn import linear_model
class MarketingCosts:
# param marketing_expenditure list. Expenditure for each previous campaign.
# param units_sold list. The number of units sold for each previous campaign.
# param desired_units_sold int. Target number of units to sell in the new campaign.
# returns float. Required amount of money to be invested.
@staticmethod
def desired_marketing_expenditure(marketing_expenditure, units_sold, desired_units_sold):
marketing_expenditure = np.asarray(marketing_expenditure).reshape(-1, 1)
units_sold = np.asarray(units_sold).reshape(-1, 1)
reg = linear_model.LinearRegression()
reg.fit(marketing_expenditure , units_sold)
return np.float((desired_units_sold - reg.intercept_)/reg.coef_)
#For example, with the parameters below the function should return 250000.0.
print(MarketingCosts.desired_marketing_expenditure(
[300000, 200000, 400000, 300000, 100000],
[60000, 50000, 90000, 80000, 30000],
60000))
答案 1 :(得分:1)
我遇到了同样的问题,我在四舍五入地解决了第一个测试用例,从而使第二个无法通过...这是一个小样本,单变量回归,因此实际上看起来您不能使用普通回归,但是Theil -森回归。我检查了结果,得出的结果是250000.00003619,然后您将其取整。
来源: https://gist.github.com/mfakbar/f97949299171c75e868a37f3f578fa54
import numpy as np
from sklearn import linear_model
class MarketingCosts:
# param marketing_expenditure list. Expenditure for each previous campaign.
# param units_sold list. The number of units sold for each previous campaign.
# param desired_units_sold int. Target number of units to sell in the new campaign.
# returns float. Required amount of money to be invested.
@staticmethod
def desired_marketing_expenditure(marketing_expenditure, units_sold, desired_units_sold):
y, x = np.array(marketing_expenditure), np.array(units_sold).reshape(-1, 1)
regressor = linear_model.TheilSenRegressor(max_subpopulation=10)
regressor.fit(x, y)
desired_units_sold = np.array([desired_units_sold]).reshape(-1, 1)
return float(round(regressor.predict(desired_units_sold).item()))
# For example, with the parameters below the function should return 250000.0.
print(MarketingCosts.desired_marketing_expenditure(
[300000, 200000, 400000, 300000, 100000],
[60000, 50000, 90000, 80000, 30000],
60000))
答案 2 :(得分:0)
我认为这是解决方案,因为我们试图从y预测X,并且此问题中的标签为units_sold。
import numpy as np
from sklearn import linear_model
class MarketingCosts:
# param marketing_expenditure list. Expenditure for each previous campaign.
# param units_sold list. The number of units sold for each previous campaign.
# param desired_units_sold int. Target number of units to sell in the new campaign.
# returns float. Required amount of money to be invested.
@staticmethod
def desired_marketing_expenditure(marketing_expenditure, units_sold, desired_units_sold):
marketing_expenditure = marketing_expenditure.reshape(-1, 1)
units_sold = units_sold.reshape(-1, 1)
reg = linear_model.LinearRegression()
reg.fit(marketing_expenditure , units_sold)
return (desired_units_sold - reg.intercept_)/reg.coef_
#For example, with the parameters below the function should return 250000.0.
print(MarketingCosts.desired_marketing_expenditure(
[300000, 200000, 400000, 300000, 100000],
[60000, 50000, 90000, 80000, 30000],
60000))
答案 3 :(得分:0)
这是我通过所有测试的答案:
import numpy as np
from sklearn.linear_model import LinearRegression
def desired_marketing_expenditure(marketing_expenditure, units_sold, desired_units_sold):
x = np.array(marketing_expenditure).reshape(-1, 1)
y = np.array(units_sold).reshape(-1, 1)
model = LinearRegression()
model.fit(x , y)
return (desired_units_sold - model.intercept_)/model.coef_
答案 4 :(得分:0)
您可以找到执行线性回归here
的简单步骤import numpy as np
from sklearn.linear_model import LinearRegression
def desired_marketing_expenditure(marketing_expenditure, units_sold, desired_units_sold):
s_x = sum(marketing_expenditure)
s_y = sum(units_sold)
xy = []
for i in range (len(marketing_expenditure)):
z= marketing_expenditure[i]*units_sold[i]
xy.append(z)
s_xy = sum(xy)
sq_x = [number ** 2 for number in marketing_expenditure]
s_sq_x = sum(sq_x)
sq_y = [number ** 2 for number in units_sold]
s_sq_y = sum(sq_y)
# calculating coefficients a and b for liner regression
a=((s_y*s_sq_x) - (s_x*s_xy))/(len(marketing_expenditure)*s_sq_x - (s_x**2))
b=(len(marketing_expenditure)*s_xy - (s_x*s_y)) /
(len(marketing_expenditure)*s_sq_x - (s_x**2))
return (desired_units_sold-a)/b
#For example, with the parameters below, the function should return 250000.0
print(desired_marketing_expenditure(
[300000, 200000, 400000, 300000, 100000],
[60000, 50000, 90000, 80000, 30000],
60000))