Python 使用机器学习添加两个数字的模型

Python 使用机器学习添加两个数字的模型,python,numpy,machine-learning,Python,Numpy,Machine Learning,我试图用机器学习来模拟一个加法。但模型总是预测相同的结果。这是我的密码: 将numpy导入为np 随机输入 从sklearn.naive_bayes导入GaussianNB X=np.数组([[0,1],[1,1],[2,1],[2,2],[2,3],[3,3],[3,4],[4,4],[4,5]) Y=np.数组([1,2,3,4,5,6,7,8,9]) clf=GaussianNB() clf.配合(X,Y) x=random.random() y=random.random() d=1 e

我试图用机器学习来模拟一个加法。但模型总是预测相同的结果。这是我的密码:

将numpy导入为np
随机输入
从sklearn.naive_bayes导入GaussianNB
X=np.数组([[0,1],[1,1],[2,1],[2,2],[2,3],[3,3],[3,4],[4,4],[4,5])
Y=np.数组([1,2,3,4,5,6,7,8,9])
clf=GaussianNB()
clf.配合(X,Y)
x=random.random()
y=random.random()
d=1
e=10000
精度=0
而drandom.random()
生成0到1之间的实数随机数,所以模型只预测了0或1和最大值2,x+y不是整数

您可以使用
random.randint(a,b)


首先,正如评论中指出的,这是一个回归问题,而不是分类问题,
GaussianNB
是一个分类器。其次,您的代码是错误的,您在同一测试集上进行预测,因为您没有重新生成要预测的随机值

这里有一个解决这个问题的方法。首先,您尝试在特征和目标变量之间建立线性关系模型,因此您希望您的模型学习如何使用线性函数映射
f(X)->y
,在本例中,这是一个简单的加法。因此,您需要一个新的解决方案

所以在这里我们可以使用。要培训回归者,您可以执行以下操作:

from sklearn.linear_model import LinearRegression

X = np.random.randint(0,1000, (20000, 2))
y = X.sum(1)
lr = LinearRegression()
lr.fit(X,y)
然后以类似的方式生成一个包含未知组合的测试,希望回归者能够准确预测:

X_test = X = np.random.randint(0,1000, (2000, 2))
y_test = X.sum(1)
如果我们使用经过训练的模型进行预测,并将预测值与原始值进行比较,我们会发现该模型确实完美地映射了我们预期的加法函数:

y_pred = lr.predict(X_test)

pd.DataFrame(np.vstack([y_test, y_pred]).T, columns=['Test', 'Pred']).head(10)

    Test    Pred
0  1110.0  1110.0
1   557.0   557.0
2    92.0    92.0
3  1210.0  1210.0
4  1176.0  1176.0
5  1542.0  1542.0
通过检查模型的
系数
,我们可以看到模型已学习到以下最佳系数:

lr.coef_
# array([1., 1.])
以及:

这基本上将线性回归转化为加法,例如:

X_test[0]
# array([127, 846])

因此,我们将使用
y_pred=0+1*127+1*846

您试图将分类器应用于回归问题。那是行不通的。
lr.intercept_
# 4.547473508864641e-13 -> 0
X_test[0]
# array([127, 846])