接下来将为大家详细讲解“Python感知机实现代码”的完整攻略。
什么是感知机
感知机是二元线性分类模型,输入是向量,输出是标志所属的二元分类,常用于二元分类、多元分类和回归分析等领域。
感知机实现代码攻略
实现步骤
以下是Python实现感知机分类的步骤:
- 定义感知机模型的输入与输出维度。
- 定义感知机模型的参数:权重向量和偏置。
- 进行前向传播,计算感知机模型的输出。
- 计算损失函数,使用随机梯度下降算法更新感知机模型的参数,使得损失函数最小。
以下是Python实现感知机分类的代码示例:
import numpy as np
class Perceptron(object):
"""Perceptron classifier.
Parameters
----------
eta : float
Learning rate (between 0.0 and 1.0)
n_iter : int
Passes over the training dataset.
Attributes
----------
w_ : 1d-array
Weights after fitting.
errors_ : list
Number of misclassifications in every epoch.
"""
def __init__(self, eta=0.01, n_iter=50):
self.eta = eta
self.n_iter = n_iter
def fit(self, X, y):
"""Fit training data.
Parameters
----------
X : {array-like}, shape = [n_samples, n_features]
Training vectors, where n_samples is the number of samples and
n_features is the number of features.
y : array-like, shape = [n_samples]
Target values.
Returns
-------
self : object
"""
self.w_ = np.zeros(1 + X.shape[1])
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_[1:] += update * xi
self.w_[0] += update
errors += int(update != 0.0)
self.errors_.append(errors)
return self
def net_input(self, X):
"""Calculate net input"""
return np.dot(X, self.w_[1:]) + self.w_[0]
def predict(self, X):
"""Return class label after unit step"""
return np.where(self.net_input(X) >= 0.0, 1, -1)
这里的代码示例使用了Numpy库,需要先安装Numpy框架。
我们可以通过使用Iris数据集进行测试与验证,训练集样本数为100,测试集样本数为50,样本共4个特征。
以下是对Iris数据集进行实现的Python代码示例:
import pandas as pd
import matplotlib.pyplot as plt
import numpy as np
from perceptron import Perceptron
df = pd.read_csv('https://archive.ics.uci.edu/ml/machine-learning-databases/iris/iris.data', header=None)
df.tail()
y = df.iloc[0:100, 4].values
y = np.where(y == 'Iris-setosa', -1, 1)
X = df.iloc[0:100, [0, 2]].values
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('Number of misclassifications')
plt.show()
可以看到训练集最后的错误率为0,说明感知机模型学习分类的效果非常好。
此外,我们也可以使用Make_classification库生成随机数据进行简单的测试和验证。以下是对Make_classification库生成数据集进行实现的Python代码示例:
import numpy as np
import matplotlib.pyplot as plt
from sklearn.datasets import make_classification
from perceptron import Perceptron
X, y = make_classification(n_samples=100, n_features=2, n_redundant=0, n_informative=1, random_state=1, n_clusters_per_class=1)
plt.scatter(X[:,0],X[:,1],marker='o',c=y,s=25,edgecolor='k')
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('Number of misclassifications')
plt.show()
通过以上的示例验证,可以看到感知机在处理分类问题时确实能够取得不错的效果。
以上就是Python感知机实现代码的完整攻略。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:python感知机实现代码 - Python技术站