-
panda數據分析庫 df?=?pd.read_csv(file?,?header?=?None) df.head(10)?讀取10行 df.loc[0:100?,?4].values?讀取0到100行的第四列數據 iloc主要使用數字來索引數據,而不能使用字符型的標簽來索引數據 而loc則剛好相反,只能使用字符型標簽來索引數據,不能使用數字 來索引數據 plt.scatter繪制散點圖 plt.scatter(X[:50?,?0]?,?X[:50?,?1]?,?color='red'?,?marker='o') 前50列數據,x軸為0列,y軸為1列數據,畫出的點為紅圈
查看全部 -
?X:[???[1,2,3]?,?[4,5,6]???] ?y:[????????1????,????-1???????] ?zip(X,y)?=?[[1,2,3,?1?]?,?[4,5,6?,?-1]] ? ?np.zero?向量全賦零操作 ?np.dot(X?,?y)??點積??w_[1:]權重w從1到最后 ?np.where(x>0?,?true?,?false)?等價于冒號表達式
查看全部 -
X?=?np.array X:shape[n_samples?,?n_features] X:[?[1?,?2?,?3]?,?[4?,?5?,?6]?] n_samples?:?2??n_features?:?3 X.shape[1]就是X的n_samples值,值為2。
查看全部 -
和方差求偏導
查看全部 -
import numpy as np
class perceptron(object):
? ? '''
? ? eta:學習率
? ? n_iter:權重向量的訓練次數
? ? w_:神經分叉權重向量 ?w處理輸入x
? ? errors_:用于記錄神經元判斷出錯次數
? ? '''
? ? def _int_(self,eat=0.01,n_iter=10):
? ? ? ? self.eat=eat;
? ? ? ? self.n_iter=n_iter;
? ? ? ? pass
? ? def fit(self,X,y):
? ? ? ? """
? ? ? ? 輸入訓練數據,培訓神經元,X是輸入的訓練樣本,y是對樣本的正確分類
? ? ? ? X:shape[n_samples,n_features]
? ? ? ? n_samples:幾組數據。n_features:有多少個神經分叉。
? ? ? ? X[[1,2,3],[4,5,6]]?
? ? ? ? n_samples:2
? ? ? ? n_features:3
? ? ? ? y:[1,-1]
? ? ? ??
? ? ? ? """
? ? ? ? '''
? ? ? ? 初始化權重向量為0
? ? ? ? w_:是一個一位數組,代表每個神經纖維的權重向量
? ? ? ? X.shape[1]:在計算有幾個神經纖維
? ? ? ? 加一是因為前面算法提到的w0,也就是步調函數的閾值
? ? ? ? 開始的時候閾值 ?塞它=w0 用w0保存
? ? ? ? '''
? ? ? ? self.w_=np.zero(1+X.shape[1]);
? ? ? ? self.errors=[];
? ? ? ? for _ in range(self.n_iter):
? ? ? ? ? ? error=0;
? ? ? ? ? ? '''
? ? ? ? ? ? X[[1,2,3],[4,5,6]]
? ? ? ? ? ? y:[1,-1]
? ? ? ? ? ? zip(X,y)=[[1,2,3,1],[4,5,6,-1]]
? ? ? ? ? ??
? ? ? ? ? ? '''
? ? ? ? ? ? for xi,target in zip(X,y):
? ? ? ? ? ? ? ? '''
? ? ? ? ? ? ? ? target:每組數據,一個個神經元 判斷的正確值標準值
? ? ? ? ? ? ? ? update=學習率*(y-y')
? ? ? ? ? ? ? ? '''
? ? ? ? ? ? ? ? update=self.eta*(target-self.predict(xi))
? ? ? ? ? ? ? ? '''
? ? ? ? ? ? ? ? predict:函數,是用來根據每個神經元輸入的一組數據得到自己判斷的結果
? ? ? ? ? ? ? ? xi 是一個向量
? ? ? ? ? ? ? ? update*xi等價:
? ? ? ? ? ? ? ? [的它w(1)=x[1]*update,的它w(2)=x[2]*update,的它w(3)=x[3]*update,]
? ? ? ? ? ? ? ? '''
? ? ? ? ? ? ? ? self.w_[1:] +=update*xi
? ? ? ? ? ? ? ? self.w_[0] +=update;
? ? ? ? ? ??
? ? ? ? ? ??
? ? ? ? ? ??
? ? ? ? ? ? ? ? errors += int(update != 0.0)
? ? ? ? ? ? ? ? self.errors_append(errors) ??
? ? ? ? ? ? ? ? pass
? ? ??
? ? ? ? ? ? pass
? ? ? ? def net_input(self,x):
? ? ? ? ? ? '''
? ? ? ? ? ? 完成神經元對輸入信號的處理(加權點乘)
? ? ? ? ? ? '''
? ? ? ? ? ? return np.dot(X ?, self.w_[1:] + self.w_[0])
? ? ? ? ? ? pass
? ? ? ? def predict(self,x):
? ? ? ? ? ? ? ? ? ? ? ? ? '''
? ? ? ? ? ? ? ? ? ? ? ? ? 加權點乘后用于與閾值判斷
? ? ? ? ? ? ? ? ? ? ? ? ? '''
? ? ? ? ? ? return np.where(self.net_input(X) >= 0.0 , 1 , -1)
? ? ? ? ? ? pass
? ? ? ??
? ? ? ? pass
查看全部 -
對人類智商和尊嚴進行全面的碾壓...
查看全部 -
感知器數據分類算法步驟
查看全部 -
file="" import?pandas?as?pd import?matplotlib.pyplot??as?plt import?numpy?as?np df=pd.read_cvs(flie,header=none)//文件第一行即數據第一行 y=df.loc[0:100,4].values//讀取數據,將0-100行數據的第四列,作為輸出y(vector) y=np.where(y=="",1,-1)//將輸出字符串轉化成數字 x=df.loc[0:100,[0,2]].values//第0列和第2列作為輸入抽取出來 plt.scatter(x[:50,0],x[:50,1],color='red',marker='o',label="xxx") plt.scatter(x[50:100,0],x[50:100,1],color='blue',marker='x',label="yyy") plt.xlabel('lll') plt.ylabel('mmm') plt.legend(loc='upper?left')//設置圖例屬性 plt.show()
查看全部 -
感知器算法 試用范圍:
Linearly separable 線性可分割 √
Not linearly separable? 線性不可分割的 ×
查看全部 -
閾值的更新
????閾值
????????一開始是 根據我們的經驗,設定一個值
????????這個值再后續中要不斷的更新。
????????就是 w0 的更新。沒有x0可以乘。
θ = -w0?
wo = w0 + dw0
dw0 = η * e(y)
查看全部 -
權重更新算法:
wj = wj + dwj
dwj = η * (y - y^) * xj
? ? ? ?=?η * e(y) * xj?
η:學習率,是[0, 1]間的一個小數。
????需要模型的設計者自己去設定。模型自己訓練中不斷地調整權重w的取值。然鵝,不同的學習率η,有可能會影響到最后的模型學習效果。
查看全部 -
步調函數 & 閾值
z* = z - theta? (????)
z* ><? 2* theta
查看全部 -
感知器 數據分類算法 步驟:
把權重向量w初始化為0(或[0, 1]間任意小數);
把訓練樣本輸入感知器,得到分類結果(-1, 或1);
根據分類結果更新權重向量w 。
整個機器學習的目的,就是 通過輸入的訓練樣本,反復去更新權重向量w,直到權重向量更新到一定程度之后,我們的整個模型才能有效地對未知輸入做出有效的分類和預測。
查看全部 -
123查看全部
-
老師沒有把代碼貼出來,光看老師講映像不夠深刻,還是要自己動手。同學把自己整理的代碼貼出來給大家看看:
查看全部
舉報