神經網路 非線性問題的處理 二分類

2021-10-03 15:38:34 字數 2596 閱讀 4403

"""

以前我們涉及的都是線性問題

現在我們涉及的是非線性問題

什麼是非線性問題?:

計算結果是一條直線的問題叫做線性問題,要麼遞增,要麼遞減

而非線性問題不會走這種極端,它是有乙個過程的變化

""""""

以三好學生的評選規則來引入非線性問題

1.學校還是要評選三好學生,學校已經頒布了三好學生的評選結果,所有家長已經知道了自己孩子是否被評選上三好學生

2.所有家長知道自己孩子的德育分,智育分,體育分三項分數成績。但是不知道總分,這次學校沒有發布總分。

3.學校本次評選三好學生的評選規則是:總分》=95分即為三好學生;計算總分的表達公式仍然是:

總分 = 德育分*60% + 智育分*30% + 體育分*10%,但學校沒有公布這些規則,家長也不知情。

家長們通過神經網路來計算出學校的上述規則

""""""

問題分析:此類問題為二分類問題

何為二分類問題:

可以理解為 根據輸入得到輸出 而輸出的結果 只有兩種結果:0或者1,也就是要麼是三好學生 要麼不是三好學生

""""""

提到:跳變函式或者叫階躍函式

y是xall的乙個函式,即:y = f(xall) 再在可允許的b範圍內做微調即為: y = f(xall)+b

y隨著x的變化並不是一條直線

而是在某個地方某個點產生了乙個跳變,我們稱之為跳變函式

sigmoid函式就是乙個跳變函式,這個函式可以吧任何數字變成0到1範圍之間的數字

sigmoid函式常常用來被神經網路進行二分類

""""""

神經網路模型圖

""""""

實現本模型的**

"""import tensorflow as tf

import random #因為後面要產生比較真實的符合基本情況的隨機資料,用來對神經網路進行訓練,所以這裡匯入這個庫

random.seed() #執行隨機數函式前,呼叫此函式產生新的隨機數種子

x = tf.placeholder(dtype=tf.float32) #輸入值

ytrain = tf.placeholder(dtype=tf.float32) #目標值 : 0 或者 1

w = tf.variable(tf.zeros([3]), dtype=tf.float32) #權值初始化為0

b = tf.variable(80, dtype=tf.float32)

wn = tf.nn.softmax(w) #權值相加和為1

n1 = wn * x # n1節點等於 各項分數權值 乘以 各項分數

n2 = tf.reduce_sum(n1) - b #n2節點等於n1節點的和 也就是最後某個同學的總分數

y = tf.nn.sigmoid(n2) # 最後呼叫sigmoid函式 計算出 y的結果 要麼為0 要麼為1

loss = tf.abs(ytrain-y) #計算誤差率

optimizer = tf.train.rmspropoptimizer(0.1) #調整優化器以0.1學習效率

train = optimizer.minimize(loss) #train物件以最小原則化調整可變引數

sess = tf.session() #會話物件

init = tf.global_variables_initializer() #可變引數的初始化

sess.run(init) #執行初始化函式

"""下面的**是產生相對符合實際情況的隨機資料,便與神經網路的計算提供足夠資料

"""for i in range(50000):

xdata = [int(random.random()*8+93),int(random.random()*8+93),int(random.random()*8+93)] #隨機產生三個輸入值,向量,[93,100)

xall = xdata[0]*0.6 + xdata[1]*0.3 + xdata[2]*0.1

if xall >= 95:

ytraindata = 1

else:

ytraindata = 0;

result = sess.run([train, x, ytrain, wn, b, n2, y, loss], feed_dict=)

print(result)

xdata = [int(random.random()*41+60),int(random.random()*41+60),int(random.random()*41+60)] #產生【60,100)的隨機數

xall = xdata[0]*0.6 + xdata[1]*0.3 + xdata[2]*0.1

if xall >= 95:

ytraindata = 1

else:

ytraindata = 0

result = sess.run([train, x, ytrain,wn, b, n2, y, loss], feed_dict=)

print(result)

"""最後相當於產生了兩組隨機數用來測試帶入神經網路**進行計算

"""

神經網路解決二分類問題

import tensorflow as tf from numpy.random import randomstate batch size 8 w1 tf.variable tf.random normal 2,3 stddev 1,seed 1 w2 tf.variable tf.random...

基於神經網路的二分類問題

在之前的文章中,介紹了神經網路的概念和演算法思想,甚至給出了公式推導。但依然沒有掌握神經網路的精髓,於是打算進一步學習就在網上 了吳恩達大佬的 神經網路和深度學習 這門課程,覺得收穫很大。目前只學習了單個神經元的原理及應用,下面簡單總結一下。1.損失函式的定義 與之前介紹的單個神經元的工作原理不同之...

神經網路,如何解決非線性問題

如果您還記得特徵組合這一單元的話,就會發現以下分類問題屬於非線性問題 圖 1.非線性分類問題。非線性 意味著您無法使用形式為 b w1x1 w2x2 的模型準確 標籤。也就是說,決策面 不是直線。之前,我們了解了對非線性問題進行建模的一種可行方法 特徵組合。現在,請考慮以下資料集 圖 2.更難的非線...