• 感知器及其应用



    博客班级 AHPU机器学习
    作业要求 作业要求
    作业目标 熟练掌握代码编写
    学号 3180701209

    一.实验目的

    1.理解感知器算法原理,能实现感知器算法;

    2.掌握机器学习算法的度量指标;

    3.掌握最小二乘法进行参数估计基本原理;

    4.针对特定应用场景及数据,能构建感知器模型并进行预测。

    二.实验内容

    1.安装Pycharm,注册学生版。

    2.安装常见的机器学习库,如Scipy、Numpy、Pandas、Matplotlib,sklearn等。

    3.编程实现感知器算法。

    4.熟悉iris数据集,并能使用感知器算法对该数据集构建模型并应用

    三、实验报告要求

    1.按实验内容撰写实验过程;

    2.报告中涉及到的代码,每一行需要有详细的注释;

    3.按自己的理解重新组织,禁止粘贴复制实验内容!

    四.实验过程及结果

    实验代码及注释

    随即梯度下降法 Stochastic Gradient Descent
    随机抽取一个误分类点使其梯度下降。

    当实例点被误分类,即位于分离超平面的错误侧,则调整w, b的值,使分离超平面向该无分类点的一侧移动,直至误分类点被正确分类。

    (1)、

    import pandas as pd #Pandas是python的一个数据分析包
    import numpy as np
    from sklearn.datasets import load_iris #iris数据集
    import matplotlib.pyplot as plt
    %matplotlib inline
    

    (2)、

    %# load data
    iris = load_iris() #iris数据集
    df = pd.DataFrame(iris.data, columns=iris.feature_names)//获取列的属性值
    df['label'] = iris.target//增加一列为类别标签
    

    (3)、

    #columns是列名(列索引)
    df.columns = ['sepal length', 'sepal width', 'petal length', 'petal width', 'label']//将各个列重命名
    df.label.value_counts()value_counts//计算相同数据出现的次数
    

    (4)、

    %#画两分类散点图
    plt.scatter(df[:50]['sepal length'], df[:50]['sepal width'], label='0')//绘制散点图
    plt.scatter(df[50:100]['sepal length'], df[50:100]['sepal width'], label='1')
    plt.xlabel('sepal length')//给图加上图例
    plt.ylabel('sepal width')
    plt.legend()
    

    (5)、

    data = np.array(df.iloc[:100, [0, 1, -1]])//按行索引,取出第0,1,-1列
    

    (6)、

    X, y = data[:,:-1], data[:,-1]//X为sepal length,sepal width y为标签
    

    (7)、

    y = np.array([1 if i == 1 else -1 for i in y])//将两个类别设重新设置为+1 —1
    

    (8)、

    #数据线性可分,二分类数据,此处为一元一次线性方程
    class Model:
    def init(self)://将参数w1,w2置为1 b置为0 学习率为0.1
    self.w = np.ones(len(data[0])-1, dtype=np.float32) //data[0]为第一行的数据len(data[0]=3)这里取两个w权重参数
    self.b = 0
    self.l_rate = 0.1
    %# self.data = data
    
    def sign(self, x, w, b):
    y = np.dot(x, w) + b
    return y
    
    # 随机梯度下降法
    def fit(self, X_train, y_train)://拟合训练数据求w和b
    is_wrong = False//判断是否误分类
    while not is_wrong:
    wrong_count = 0
    for d in range(len(X_train))://取出样例,不断的迭代
    X = X_train[d]
    y = y_train[d]
    if y * self.sign(X, self.w, self.b) <= 0://根据错误的样本点不断的更新和迭代w和b的值(根据相乘结果是否为负来判断是否出错,本题将0也归为错误)
    self.w = self.w + self.l_ratenp.dot(y, X)
    self.b = self.b + self.l_ratey
    wrong_count += 1
    if wrong_count == 0://直到误分类点为0 跳出循环
    is_wrong = True
    return 'Perceptron Model!'
    
    def score(self):
    pass
    

    (9)、

    perceptron = Model()
    perceptron.fit(X, y)//感知机模型
    

    (10)、绘制模型图像,定义一些基本的信息

    x_points = np.linspace(4, 7,10)//x轴的划分
    y_ = -(perceptron.w[0]*x_points + perceptron.b)/perceptron.w[1]
    plt.plot(x_points, y_)//绘制模型图像(数据、颜色、图例等信息)
    plt.plot(data[:50, 0], data[:50, 1], 'bo', color='blue', label='0')
    plt.plot(data[50:100, 0], data[50:100, 1], 'bo', color='orange', label='1')
    plt.xlabel('sepal length')
    plt.ylabel('sepal width')
    plt.legend()
    

    (11)、

    from sklearn.linear_model import Perceptron//定义感知机(下面将使用感知机)
    

    (12)、

    clf = Perceptron(fit_intercept=False, max_iter=1000, shuffle=False)
    clf.fit(X, y)//使用训练数据拟合
    

    (13)、

    %# Weights assigned to the features.
    print(clf.coef_)//输出感知机模型参数
    

    (14)、

    %# 截距 Constants in decision function.
    print(clf.intercept_)//输出感知机模型参数
    

    (15)、

    x_ponits = np.arange(4, 8)//确定x轴和y轴的值
    y_ = -(clf.coef_[0][0]*x_ponits + clf.intercept_)/clf.coef_[0][1]
    plt.plot(x_ponits, y_)//确定拟合的图像的具体信息(数据点,线,大小,粗细颜色等内容)
    plt.plot(data[:50, 0], data[:50, 1], 'bo', color='blue', label='0')
    plt.plot(data[50:100, 0], data[50:100, 1], 'bo', color='orange', label='1')
    plt.xlabel('sepal length')
    plt.ylabel('sepal width')
    plt.legend()
    

    实验结果截图

    五.实验小结

    (1)psp表格

    psp2.1 任务内容 计划完成需要的时间(min) 实际完成需要的时间(min)
    Planning 计划 100 80
    Development 开发 200 250
    Analysis 需求分析(包括学习新技术) 20 40
    Design Spec 生成设计文档 30 50
    Design Review 设计复审 5 10
    Coding Standard 代码规范 3 5
    Design 具体设计 10 12
    Coding 具体编码 80 90
    Code Review 代码复审 60 70
    Test 测试(自我测试,修改代码,提交修改) 10 15
    Reporting 报告 9 6
    Test Report 测试报告 3 2
    Size Measurement 计算工作量 3 2
    Postmortem & Process Improvement Plan 事后总结,并提出过程改进计划 5 3

    (2)心得和经验

    了解、学到了很多知识,通过查阅书本、网上资料来理解实验代码。通过编译得到结果,实践与理论相结合。

  • 相关阅读:
    每日日报24
    每日日报23
    每日日报22
    链路层:MAC 地址
    应用层:电子邮件
    应用层:HTTP 协议
    应用层:DNS 域名系统
    运输层:TCP 拥塞控制
    运输层:拥塞控制原理
    JAVA学习日记26-0731
  • 原文地址:https://www.cnblogs.com/sunxianlan/p/14749917.html
Copyright © 2020-2023  润新知