簡介
神經網路中最基本的成分是神經元模型,感知機(Perceptron)是由兩層神經元組成的雙層神經網路模型, 其輸入層接受外界輸入訊號傳遞給輸出層, 輸出層是 M-P 神經元(閾值邏輯單元)。感知機也屬於二分類的線性分類模型, 其輸入為範例的特徵向量, 輸出為範例的類別, 取 +1 和 –1 二值。
本實訓專案基於西瓜好壞識別的簡單案例介紹感知機的基本原理和思路,然後基於sklearn框架提供的感知機模型完成癌細胞精準識別的實戰案例。
第一關
#encoding=utf8
import numpy as np
#構建感知機演演算法
class Perceptron(object):
def __init__(self, learning_rate = 0.01, max_iter = 200):
self.lr = learning_rate
self.max_iter = max_iter
def fit(self, data, label):
'''
input:data(ndarray):訓練資料特徵
label(ndarray):訓練資料標籤
output:w(ndarray):訓練好的權重
b(ndarry):訓練好的偏置
'''
#編寫感知機訓練方法,w為權重,b為偏置
self.w = np.array([1.]*data.shape[1])
self.b = np.array([1.])
for i in range(len(label)):
while label[i]*(np.matmul(self.w,data[i])+self.b) <= 0:
self.w = self.w + self.lr * (label[i]*data[i])
self.b = self.b + self.lr * label[i]
def predict(self, data):
'''
input:data(ndarray):測試資料特徵
output:predict(ndarray):預測標籤
'''
yc = np.matmul(data,self.w) + self.b
for i in range(len(yc)):
if yc[i] >= 0:
yc[i] = 1
else:
yc[i] = -1
predict = yc
return predict
第二關
#encoding=utf8
import os
if os.path.exists('./step2/result.csv'):
os.remove('./step2/result.csv')
#********* Begin *********#
import pandas as pd
from sklearn.linear_model.perceptron import Perceptron
train_data = pd.read_csv('./step2/train_data.csv')
train_label = pd.read_csv('./step2/train_label.csv')
train_label = train_label['target']
test_data = pd.read_csv('./step2/test_data.csv')
clf = Perceptron(max_iter = 1000,eta0 = 0.1, random_state = 666)
clf.fit(train_data,train_label)
predict = clf.predict(test_data)
df = pd.DataFrame({'result':predict})
df.to_csv('./step2/result.csv', index=False)
#********* End *********#
這次忘了更新,抱歉各位!
感謝大家的支援