参考了han同学的答案,西瓜数据集也可在han同学的github上下载。

3.5 编辑实现线性判别分析,并给出西瓜数据集 3.0α 上的结果.

import numpy as np
import pandas as pd
from matplotlib import pyplot as plt
# 下面这两行是为了让matplotlib画图时的汉字正常显示
import matplotlib
matplotlib.rc("font",family='YouYuan')class LDA(object):# 绘图,求出均值向量,根据公式3.34和3.39求出类内散度矩阵和类间散度矩阵def fit(self, X_, y_, plot_=False):# 取出正反例各自数据,计算均值向量neg = y_ == 0pos = y_ == 1X0 = X_[neg]X1 = X_[pos]# 均值向量,(1, 2)u0 = X0.mean(0, keepdims=True)u1 = X1.mean(0, keepdims=True)# 类内散度矩阵,公式3.33,(2, 2)sw = np.dot((X0 - u0).T, (X0 - u0)) + np.dot((X1 - u1).T, (X1 - u1))# 类间散度矩阵,公式3.37,(1, 2)w = np.dot(np.linalg.inv(sw), (u0 - u1).T).reshape(1, -1)# 绘图if plot_:fig, ax = plt.subplots()ax.spines['right'].set_color('none')ax.spines['top'].set_color('none')ax.spines['left'].set_position(('data', 0))ax.spines['bottom'].set_position(('data', 0))# 画样本点plt.scatter(X1[:, 0], X1[:, 1], c='k', marker='o', label='good')plt.scatter(X0[:, 0], X0[:, 1], c='r', marker='x', label='bad')plt.xlabel('密度')plt.ylabel('含糖量')plt.legend(loc='upper right')# 画线x_temp = np.linspace(-0.05, 0.15)y_temp = x_temp * w[0, 1] / w[0, 0]plt.plot(x_temp, y_temp, '#808080', linewidth=1)wu = w / np.linalg.norm(w)# 画正负样本点的投影,真的没看懂哈哈哈X0_project = np.dot(X0, np.dot(wu.T, wu))plt.scatter(X0_project[:, 0], X0_project[:, 1], c='r', s=15)for i in range(X0.shape[0]):plt.plot([X0[i, 0], X0_project[i, 0]], [X0[i, 1], X0_project[i, 1]], '--r', linewidth=1)X1_project = np.dot(X1, np.dot(wu.T, wu))plt.scatter(X1_project[:, 0], X1_project[:, 1], c='k', s=15)for i in range(X1.shape[0]):plt.plot([X1[i, 0], X1_project[i, 0]], [X1[i, 1], X1_project[i, 1]], '--r', linewidth=1)# 均值向量的投影点ax.annotate(r'u0 投影点',xy=(u0_project[:, 0], u0_project[:, 1]),xytext=(u0_project[:, 0] - 0.2, u0_project[:, 1] - 0.1),size=13,va="center", ha="left",arrowprops=dict(arrowstyle="->",color="k",))ax.annotate(r'u1 投影点',xy=(u1_project[:, 0], u1_project[:, 1]),xytext=(u1_project[:, 0] - 0.1, u1_project[:, 1] + 0.1),size=13,va="center", ha="left",arrowprops=dict(arrowstyle="->",color="k",))plt.axis("equal")  # 两坐标轴的单位刻度长度保存一致plt.show()self.w = wself.u0 = u0self.u1 = u1return selfdef predict(self, X):# 各样本在的投影project = np.dot(X, self.w.T)# 均值投影wu0 = np.dot(self.w, self.u0.T)wu1 = np.dot(self.w, self.u1.T)return (np.abs(project - wu1) < np.abs(project - wu0)).astype(int)if __name__=='__main__':data_path = r'C:\***\ch3--线性模型\3.3\watermelon3_0_Ch.csv'data = pd.read_csv(data_path).values# print(data)X = data[:, 7:9].astype(float)y = data[:, 9]y[y == '是'] = 1y[y == '否'] = 0y = y.astype(int)lda = LDA()lda.fit(X, y, plot_=True)# 根据LDA的进行预测print(lda.predict(X)[:, 0])# 样本标记print(y)

《机器学习》课后习题3.5 编辑实现线性判别分析,并给出西瓜数据集 3.0α 上的结果.相关推荐

  1. 周志华《机器学习》3.5答案-编程实现线性判别分析,并给出西瓜数据集3.0α上的结果

    #机器学习线性判别分析3.5题 import numpy as np import matplotlib.pyplot as plt data = [[0.697, 0.460, 1],[0.774, ...

  2. 机器学习《西瓜书》9.4解答——k-means算法:编程实现k均值算法,设置三组不同的k值、三组不同初始中心点,在西瓜数据集4.0上进行实验比较,并讨论什么样的初始中心有助于得到好结果。

    1.运行结果:(注:图中方块标注的点为随机选取的初始样本点) k=2时: 本次选取的2个初始向量为[[0.243, 0.267], [0.719, 0.103]] 共进行61轮 共耗时0.10s k= ...

  3. 机器学习——课后习题解答

    文章目录 机器学习课后习题解答 第一章 绪论 1. 表1.1中若只包含编号为1和4的两个样例,是给出相应的版本空间. 2. 与使用单个合取式来进行假设表示相比,使用"析合范式"将使 ...

  4. Python吴恩达机器学习课后习题作业一算法(Ⅰ)(1)

    吴恩达老师的机器学习课程是机器学习入门者必看的经典之一,其课后习题也是典中典.下面将在以Python为语言工具完成课后习题. 问题一:单元线性回归 问题:根据城市人口数量,预测开小吃店的利润 下面我将 ...

  5. 吴恩达机器学习课后习题——逻辑回归

    机器学习课后作业-逻辑回归 逻辑回归 逻辑回归算法,是一种给分类算法,这个算法的实质是:它输出值永远在0到 1 之间. 将要构建一个逻辑回归模型来预测,某个学生是否被大学录取.设想你是大学相关部分的管 ...

  6. 机器学习(三):一文读懂线性判别分析(LDA)

    一.什么是线性判别分析? 线性判别分析(Linear Discriminant Analysis,LDA)的一种经典的线性学习方法(属于监督学习),这里先借用周志华教授的<机器学习>中的图 ...

  7. 周志华机器学习课后习题解析【第二章】

    作者 | 我是韩小琦 链接 | https://zhuanlan.zhihu.com/p/42435889 2.1 数据集包含 1000 个样本,其中 500 个正例. 500 个反例,将其划分为包含 ...

  8. 吴恩达机器学习-课后习题

    原题参考链接https://www.kesci.com/home/project/5e0f01282823a10036b280a7 第 1 题 一个计算机程序从经验E中学习任务T,并用P来衡量表现.并 ...

  9. 【课程作业】西瓜书 机器学习课后习题 : 第五章

    目录 简介 说明 5.1 5.2 5.3 结语 简介 Hello! 非常感谢您阅读海轰的文章,倘若文中有错误的地方,欢迎您指出-   ଘ(੭ˊᵕˋ)੭ 昵称:海轰 标签:程序猿|C++选手|学生 简介 ...

  10. 斯坦福大学(吴恩达) 机器学习课后习题详解 第三周 逻辑回归

    测试题 都比较简单,好好看视频吧 知乎: https://zhuanlan.zhihu.com/albertwang 微信公众号:AI-Research-Studio ​ ​​ 下面是赞赏码

最新文章

  1. Oracle Instanc Client安装命令工具
  2. fastcopy会损坏硬盘_电脑硬盘损坏如何修复?自己动手就能解决
  3. 零基础学python需要多久-零基础学习Python开发需要多长时间?
  4. Ubuntu安装搜狗输入法Linux版
  5. python之time模块和hashlib模块
  6. Delphi 中的 Var buffer 开类型参数
  7. 线性复杂度的素数筛选法
  8. oracle em 界面乱码,oracle em 按钮乱码解决办法及em网页变成英文
  9. ios给系统添加分类管理属性
  10. 了解Python编程——Python学习(三)
  11. 在c语言Windows窗口添加按钮,C语言用windows.h创建按钮的问题
  12. 图卷积神经网络GCN ---如何在交通预测中考虑网络拓扑结构
  13. 关于用C#调用C++的dll中的函数,获取字符串返回值的一些细节
  14. ToStringBuilder介绍
  15. WEB UI设计规范
  16. 考研复试操作系统知识点总结
  17. 用C语言实现C++ 继承与多态
  18. 永辉私域流量模式案例:如何利用商域流量打造好企业自己的私域流量池?
  19. vue中全局注册和局部注册
  20. 6个常用大数据分析工具集锦

热门文章

  1. 清理服务器挖矿木马病毒
  2. EasyRecovery2020数据恢复软件激活码序列号秘钥下载及使用恢复教程
  3. 直播类 APP 项目开发实战(原理篇)
  4. Chromium OS并行运行Linux chroot运行Linux
  5. CNVD-2022-10270/CNVD-2022-03672 向日葵RCE复现
  6. 【第三期】电商分布式前沿springboot接口服务之删除和更新-Array-专题视频课程...
  7. QQ表情发送失败的原因
  8. 年会抽奖程序,及时安排一波【开源项目】
  9. 20+免费精美响应式Html5 网站模板01(含源码)
  10. 热血传奇GOM引擎问题集锦