【头歌】机器学习 --- 感知机

第1关:感知机 - 西瓜好坏自动识别

#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.])
        #********* Begin *********#
        i = 0
        while i < self.max_iter:
            flag = True
            for j in range(len(label)):
                if label[j] * (np.inner(self.w, data[j]) + self.b) <= 0:
                    flag = False
                    self.w += self.lr * (label[j] * data[j])
                    self.b += self.lr * label[j]
            if flag: 
                break
            i+=1
        #********* End *********#
    def predict(self, data):
        '''
        input:data(ndarray):测试数据特征
        output:predict(ndarray):预测标签
        '''
        #********* Begin *********#
        y = np.inner(data, self.w) + self.b
        for i in range(len(y)): # range(0,6) 
            if y[i] >= 0:
                y[i] = 1
            else:
                y[i] = -1
        predict = y

        #********* End *********#
        return predict

第2关:scikit-learn感知机实践 - 癌细胞精准识别

#encoding=utf8
import os

if os.path.exists('./step2/result.csv'):
    os.remove('./step2/result.csv')

#********* Begin *********#
import pandas as pd
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')
from sklearn.linear_model.perceptron import Perceptron
clf = Perceptron(eta0 = 0.01,max_iter = 200)
clf.fit(train_data, train_label)
result = clf.predict(test_data)
frameResult = pd.DataFrame({'result':result})
frameResult.to_csv('./step2/result.csv', index = False)
#********* End *********#

### 感知机机器学习中的应用及其实现 感知机是一种经典的线性分类模型,其核心思想是通过寻找一个超平面来分割不同类别的样本点。以下是感知机算法的具体实现及其在机器学习中的应用场景。 #### 数据集处理 为了训练感知机模型,通常需要对数据进行预处理。这一步骤包括但不限于加载数据、清洗数据以及标准化/归一化特征值。例如,在Python中可以利用`pandas`库完成这些操作: ```python import pandas as pd from sklearn.model_selection import train_test_split from sklearn.preprocessing import StandardScaler # 加载数据 data = pd.read_csv('dataset.csv') # 清洗数据并分离特征与标签 X = data.iloc[:, :-1].values y = data.iloc[:, -1].values # 划分训练集和测试集 X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2) # 特征缩放 scaler = StandardScaler() X_train = scaler.fit_transform(X_train) X_test = scaler.transform(X_test) ``` 上述代码展示了如何准备用于训练的数据[^1]。 #### 创建Model 构建感知机的核心在于定义权重更新规则。以下是一个基于梯度下降法的简单实现: ```python class Perceptron: def __init__(self, learning_rate=0.01, epochs=100): self.learning_rate = learning_rate self.epochs = epochs def fit(self, X, y): n_samples, n_features = X.shape # 初始化参数 self.weights = np.zeros(n_features) self.bias = 0 for _ in range(self.epochs): for idx, x_i in enumerate(X): condition = y[idx] * (np.dot(x_i, self.weights) + self.bias) if condition <= 0: update = self.learning_rate * y[idx] self.weights += update * x_i self.bias += update def predict(self, X): linear_output = np.dot(X, self.weights) + self.bias predictions = np.where(linear_output >= 0, 1, -1) return predictions ``` 此部分实现了感知机的学习过程,其中包含了权重调整逻辑[^3]。 #### 可视化结果 当数据维度较低时(如二维),可以通过绘图直观展示分类效果。下面是一段绘制决策边界的代码片段: ```python import matplotlib.pyplot as plt import numpy as np def plot_decision_boundary(model, X, y): h = .02 x_min, x_max = X[:, 0].min() - 1, X[:, 0].max() + 1 y_min, y_max = X[:, 1].min() - 1, X[:, 1].max() + 1 xx, yy = np.meshgrid(np.arange(x_min, x_max, h), np.arange(y_min, y_max, h)) Z = model.predict(np.c_[xx.ravel(), yy.ravel()]) Z = Z.reshape(xx.shape) plt.contourf(xx, yy, Z, alpha=0.8) plt.scatter(X[:, 0], X[:, 1], c=y, edgecolors='k') plt.show() plot_decision_boundary(perceptron_model, X_train, y_train) ``` 这段脚本能够帮助我们更好地理解模型的工作机制。 #### 应用场景 感知机广泛应用于二元分类问题之中,比如垃圾邮件检测、图像识别等领域。尽管它只适用于线性可分的情况,但它为更复杂的神经网络奠定了基础[^2]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

MQiyirs

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值