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])