这里 给出的是使用np代码实现的基本机器学习代码,并非直接使用包中的函数。
import numpy as np
class Perceptron:
"""
Perceptron classifier
eta:float
学习率
n_iter:int
random_state:int
Random number generator seed for random weight
初始化
Attributes
w_:1d_arrray
权重
b_:Scalar
偏置项
"""
def __init__(self, eta, n_iter=50, random_state=1):
self.eta = eta
self.n_iter = n_iter
self.random_state = random_state
def fit(self, X, y):
"""
拟合训练数据
参数
------------------
X:{array-like}, shape=[n_examples, n_features]
训练向量,n_examples是案例的数量,n_features是特征值的个数
y:array-like, shape=[n_examples] 目标值
"""
rgen = np.random.RandomState(self.random_state)
self.w_ = rgen.normal(loc=0.0, scale=0.01, size=X.shape[1])
self.b_ = np.float_(0.0)
self.errors_ = []
for _ in range(self.n_iter):
errors = 0
for xi, target in zip(x, y):
update = self.eta * (target - self.predict(xi))
self.w_ = update * xi
self.b_ = update
errors += int(update != 0.0)
self.errors_.append(errors)
return self
def net_input(self, X):
"""计算网络输入"""
return np.dot(X,self.w_) + self.b_
def predict(self, X):
"""Return class label after unit step"""
return np.where(self.net_input(X) >= 0.0, 1, 0)
接着我们可以使用鸢尾花的数据集来检验。
由于这一感知器是完成二分类的特征,因此需要截图部分数据,这里截取山鸢尾和变色鸢尾的数据,特征值为萼片长度和花瓣长度。
相应代码如下
数据集在下面的博客可以了解到
https://editor.csdn.net/md/?articleId=135319421
import matplotlib.pyplot as plt
import numpy as np
# 导入鸢尾花数据集加载到DataFrame对象中
import os
import pandas as pd
path = "../data/iris.data"
df = pd.read_csv(path, header=None, encoding='utf-8')
df.tail()
y = df.iloc[0:100,4].values
y = np.where(y=='Iris-virginica',0,1)
X = df.iloc[0:100,[0,2]].values
plt.scatter(X[:50,0],X[:50,1],color='red',marker='o',label='Setosa')
plt.scatter(X[50:100,0],X[50:100,1],color='blue',marker='s',label='Versicolor')
plt.xlabel('Sepal length [cm]')
plt.ylabel('Petal length [cm]')
plt.legend(loc='upper left')
plt.show()
山鸢尾和变色鸢尾萼片长度与花瓣长度的散点图