簡體   English   中英

Model 使用機器學習將兩個數字相加

[英]Model to add two numbers using machine learning

我正在嘗試使用機器學習來添加 model。 但是 model 的預測總是相同的。 這是我的代碼:

import numpy as np
import random
from sklearn.naive_bayes import GaussianNB

X=np.array([[0,1],[1,1],[2,1],[2,2],[2,3],[3,3],[3,4],[4,4],[4,5]])
Y=np.array([1,2,3,4,5,6,7,8,9])

clf = GaussianNB()
clf.fit(X,Y)
x=random.random()
y=random.random()
d=1
e=10000
accuracy=0
while d<e:
    d+=1
    if (clf.predict([[x, y]])) == x+y:
        accuracy+=1
    if d==e:
        print(accuracy)

在 10000 個預測中,零預測 Y 是,並且在 X 中添加兩個隨機變量出了什么問題。

首先,正如評論中指出的,這是一個回歸問題,而不是分類問題,而GaussianNB是一個分類器。 其次,您的代碼是錯誤的,您在相同的測試集上進行預測,因為您沒有重新生成要預測的隨機值。

這是關於如何解決此問題的 go。 First of all, you're trying to model a linear relation between the features and the target variable, hence you want your model to learn how to map f(X)->y with a linear function, in this case a simple addition. 因此,您需要一個線性 model

所以在這里我們可以使用LinearRegression 要訓練回歸器,您可以執行以下操作:

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)

如果我們使用經過訓練的 model 進行預測,並將預測值與原始值進行比較,我們會看到 model 確實完美地將加法 function 映射到:

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

通過檢查模型的coef_ ,我們可以看到 model 學習了以下最優系數:

lr.coef_
# array([1., 1.])

和:

lr.intercept_
# 4.547473508864641e-13 -> 0

這基本上線性回歸變成了加法,例如:

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

所以我們有y_pred = 0 + 1*127 + 1*846

random.random()生成 0 到 1 之間的實數隨機數,因此 model 僅預測 0 或 1 和最大值 2,並且 x+y 不是 integer。

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

x=random.randint(0,4)
y=random.randint(1,5)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM