摘要:摘要本文是作者看慕課網學習記錄筆記,內容技術水準是入門,大佬看到請輕言指點,手下留情介紹人工智能的基本概念和邏輯體系研究兩種麵分類算法通過運用分類算法,實現只有一層的神經網絡介紹分類算法的理論基礎機器學習的本質模擬人的神經元神經元人工神經元
摘要
本文是作者看慕課網學習記錄筆記,內容技術水準是入門,大佬看到請輕言指點,手下留情
介紹人工智能的基本概念和邏輯體系
研究兩種麵分類算法
通過python ,運用分類算法,實現只有一層的神經網絡
介紹分類算法的理論基礎機器學習的本質:模擬人的神經元神經元
人工神經元原理:
電信號從神經元的交差部分(左側)輸入
進入到細胞核(左側綠色)進行結合到一起,進行統一計算得出一個電信號
通過軸突(中間黃色部分)傳遞到后面的神經末尾部分(右側)
再把電信號分解成若干個部分,傳遞給外面的神經元
神經元的數學模擬x表示傳進來的電信號,每個x表示每個電信號;對電信號進行弱化,弱化系數w;
弱化后的電信號傳入細胞核,綜合處理后得出唯一的電信號z;細胞核還會對電信號繼續處理(激活函數,示例單元步調函數),即數據分類行為。
常見的數學運算概念向量點積
矩陣轉置
權重向量W,訓練樣本Ⅹ
把權重向量初始化為0,或把每個分量初始化為[0,1]間任意小數
把訓練樣本輸入感知器,得到分類結果(-1或1)
根據分類結果更新權重向量
步調函數與閥值 權重更新算法 閥值的更新 感知器算法試用范圍預測數據特點可線性分割,要求可以把感知的值有一條線明確分割出來,目標就是找到中間的分割線感知器算法總結
初始化感知器權重向量w
訓練樣本的電信號x輸入到感知器∑(求和),輸出求和的最終結果
求和結果輸入到步調函數(激活函數),得到結果1或-1
如果結果正確就直接輸出,錯誤就返回回去對權重向量w進行更新,更新之后等到新的權重向量w后
再把原有的訓練樣本或者新的訓練樣本結合新的權重向量w進行結合,繼續步驟2后續操作
通過上述步驟直到所有訓練樣本都正確輸出,達到最準確的權重向量w
使用 Pandas, NumPy和 matplotlib等 python開發庫去讀取,加工和可視化數據集,并實現感知器分類算法源碼地址:klinson/machine-learning-pythonPython 環境
Python3.7.3
安裝自行下載Python環境包
需要安裝tkinter
// centos sudo yum install tkinter // ubuntu sudo apt-get install tkinter // cd python-path sudo ./configure --with-tcltk-includes="-I/usr/include" --with-tcltk-libs="-L/usr/lib64 -ltcl8.5 -L/usr/lib64 -ltk8.5" --enable-optimizations sudo make && sudo make install感知器類實現
文件名Perceptron.py
# -*- coding: utf-8 -*- import numpy as np class Perceptron(object): """ Perceptron 感知器算法 eta: 學習率 n_iter: 權重向量的訓練次數 w_: 神經分叉權重向量 errors_: 用來記錄神經元判斷出錯次數 """ def __init__(self, eta = 0.01, n_iter = 0): self.eta = eta; self.n_iter = n_iter; pass def fit(self, X, y): """ 權重更新算法 根據輸入樣本,進行神經元培訓,x是輸入樣本向量,y對應樣本分類 X:shape[n_samples, n_features] X:[[1, 2, 3], [4, 5, 6]] n_samples: 2 n_features: 3 """ # 初始化權重為0 # 加一是因為前面算法提到的w0,是步調函數閾值 self.w_ = np.zeros(1 + X.shape[1]); self.errors_ = []; for _ in range(self.n_iter): errors = 0; """ X:[[1, 2, 3], [4, 5, 6]] y:[1, -1] zip(X, y) = [[1, 2, 3, 1], [4, 5, 6, -1]] target = 1 / -1 """ for xi, target in zip(X, y): """ update = n(成功率) * (y - y"),結果為0表示預測正確 target: y,預定結果 self.predict(xi): y", 對xi進行預測結果 """ update = self.eta * (target - self.predict(xi)); """ xi 是一個向量 update * xi 等級: [▽w(1) = x[1] * update, ▽w(2) = x[2] * update, ▽w(n) = x[n] * update] """ self.w_[1:] += update * xi; # 更新閾值 self.w_[0] += update; errors += int(update != 0.0) self.errors_.append(errors); pass pass pass def net_input(self, X): """ 實現向量點積 z = W0*x0+W1*x1+...+Wn*xn; """ return np.dot(X, self.w_[1:] + self.w_[0]) pass def predict(self, X): # 計算xn所屬于的分類,先進行點積,再進行判斷 return np.where(self.net_input(X) >= 0.0, 1, -1); pass執行文件
文件名main.py
# -*- coding: utf-8 -*- import pandas as pd import matplotlib.pyplot as plt from matplotlib.colors import ListedColormap import numpy as np from Perceptron import Perceptron def plot_decision_regions(X, y, classifier, resolution=0.02): #畫圖劃線分割 markers = ["s", "x", "o", "v"]; colors= ["red", "blue", "lightred", "gray", "cyan"] cmap = ListedColormap(colors[:len(np.unique(y))]); x1_min, x1_max = X[:, 0].min() - 1, X[:, 0].max(); x2_min, x2_max = X[:, 1].min() - 1, X[:, 1].max(); #print(x1_min, x1_max, x2_min, x2_max); # 根據數據最大最小值構建向量,差值resolution xx1, xx2 = np.meshgrid(np.arange(x1_min, x1_max, resolution), np.arange(x2_min, x2_max, resolution)) #print(np.arange(x1_min, x1_max, resolution).shape, np.arange(x1_min, x1_max, resolution), xx1.shape, xx1) z = classifier.predict(np.array([xx1.ravel(), xx2.ravel()]).T); z = z.reshape(xx1.shape); plt.contourf(xx1, xx2, z, alpha=0.4, cmap=cmap) plt.xlim(xx1.min(), xx1.max()) plt.ylim(xx2.min(), xx2.max()) for idx,cl in enumerate(np.unique(y)): plt.scatter(x=X[y==cl, 0], y=X[y==cl, 1], alpha=0.8, c=cmap(idx), marker=markers[idx], label=cl) pass plt.xlabel("花瓣長度"); plt.ylabel("花徑長度"); plt.legend(loc="upper left"); plt.show(); pass # 讀取文件 file = "./examples.csv"; df = pd.read_csv(file, header=None); # print(df.head(10)) # 處理第4列表 y = df.loc[0: 100, 4].values; y = np.where(y == "Tris-setosa", -1, 1); # print(y) # 講第0和2列取出來分析 X = df.iloc[0: 100, [0, 2]].values; # print(X) # 對數據可視化 """ plt.scatter(X[:5, 0], X[:5, 1], color="red", marker="o", label="setosa"),; plt.scatter(X[5:10, 0], X[5:10, 1], color="blue", marker="x", label="versicolor"); plt.xlabel("花瓣長度"); plt.ylabel("花徑長度"); plt.legend(loc="upper left"); plt.show(); """ # 訓練 ppn = Perceptron(eta=0.1, n_iter=10); ppn.fit(X, y) """ # 訓練輸出 plt.plot(range(1, len(ppn.errors_) + 1), ppn.errors_, marker="o"); plt.xlabel("Epochs"); plt.ylabel("錯誤分類次數"); plt.show(); """ # 繪制分割圖 plot_decision_regions(X, y, ppn, resolution=0.02)訓練數據
文件名examples.csv
2.1,3.5,2.7,0.2,Tris-setosa 3.1,2.6,2.6,0.2,Tris-setosa 2.1,5.5,3.4,0.5,Tris-setosa 3.1,5.2,2.9,0.2,Tris-setosa 3.1,3.4,2.3,0.3,Tris-setosa 3.1,2.3,2.1,0.2,Tris-setosa 4.7,3.5,1.4,0.2,Tris-versicolor 4.3,7.3,1.1,0.1,Tris-versicolor 4.1,4.5,1.4,0.2,Tris-versicolor 4.4,4.2,1.3,0.3,Tris-versicolor執行和結果
$ python main.py適應性線性神經元
未完待續,敬請期待
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/43819.html
摘要:值得一提的是每篇文章都是我用心整理的,編者一貫堅持使用通俗形象的語言給我的讀者朋友們講解機器學習深度學習的各個知識點。今天,紅色石頭特此將以前所有的原創文章整理出來,組成一個比較合理完整的機器學習深度學習的學習路線圖,希望能夠幫助到大家。 一年多來,公眾號【AI有道】已經發布了 140+ 的原創文章了。內容涉及林軒田機器學習課程筆記、吳恩達 deeplearning.ai 課程筆記、機...
摘要:是你學習從入門到專家必備的學習路線和優質學習資源。的數學基礎最主要是高等數學線性代數概率論與數理統計三門課程,這三門課程是本科必修的。其作為機器學習的入門和進階資料非常適合。書籍介紹深度學習通常又被稱為花書,深度學習領域最經典的暢銷書。 showImg(https://segmentfault.com/img/remote/1460000019011569); 【導讀】本文由知名開源平...
閱讀 363·2024-11-06 13:38
閱讀 738·2024-09-10 13:19
閱讀 866·2024-08-22 19:45
閱讀 1363·2021-11-19 09:40
閱讀 2598·2021-11-18 13:14
閱讀 4266·2021-10-09 10:02
閱讀 2283·2021-08-21 14:12
閱讀 1268·2019-08-30 15:54