码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • 非线性二分类——机器学习


    目录

    一、算法思想

    二、算法原理

    三、算法分析

    四、源程序代码

    五、运行结果及分析

    六、总结


    一、算法思想


            为克服线性函数分类效果不足的问题,非线性分类器中引入了非线性函数来提升分类效果。非线性分类器用一个曲面或者多个超平(曲)面的组合将两组样本隔离开。

            一个典型的非线性分类器就是决策树,它的主要思想就是用多个线性分类器的组合来将两组样本隔离开。 决策树采用非常直观的方式来对样本进行分类,你只需要针对样本的特征问一系列问题就能将各样本分离开来。

    二、算法原理


            线性分类:是用一个超平面能将正负样本区分开,表达式为y=wx,对于二维的情况,可以理解为一条直线,如一次函数。他的分类算法是基于一个线性的预测函数,决策的边界是平的,比如直线和平面。

    ​

     

            非线性分类:他的分类界面没有限制,可以是一个曲面,或者是多个超平面的组合,那在二维的情况下,应该是一个曲线,如正态分布。

            线性函数:线性函数是指那些线性的函数,但也常做一次函数的别称。

            非线性:是指不按比例,不成直线的关系,一阶导数不为常数。

    三、算法分析


            非线性分类器就是用一个超曲面或者多个超平(曲)面的组合将正、负样本隔离开(即,不属于线性的分类器),如:

      (1)二维平面上的正、负样本用一条曲线或折线来进行分类;

      (2)三维立体空间内的正、负样本用一个曲面或者折面来进行分类;

      (3)N维空间内的正负样本用一个超曲面来进行分类。

    四、源程序代码


    1. import matplotlib.pyplot as plt
    2. import numpy as np
    3. from sklearn.metrics import classification_report
    4. from sklearn import tree
    5. from sklearn.model_selection import train_test_split
    6. import graphviz
    7. #载入数据
    8. data = np.genfromtxt('test2.csv',delimiter=',')
    9. x_data = data[:,:-1]
    10. y_data = data[:,-1]
    11. plt.scatter(x_data[:,0],x_data[:,-1],c=y_data)
    12. plt.show()
    13. #分割数据
    14. x_train,x_test,y_train,y_test = train_test_split(x_data,y_data)
    15. #创建决策树模型
    16. model = tree.DecisionTreeClassifier()
    17. model.fit(x_data,y_data)
    18. #导出决策树
    19. dot_data = tree.export_graphviz(model,
    20. out_file=None,
    21. #特征的名字,要设置
    22. feature_names = ['x','y'],
    23. class_names=['label0','label1'],
    24. filled=True,
    25. rounded=True,
    26. special_characters=True)
    27. graph = graphviz.Source(dot_data)
    28. graph.render('cart_1')
    29. #获取数据值所在范围
    30. x_min,x_max = x_data[:,0].min() - 1,x_data[:,0].max() + 1
    31. y_min,y_max = x_data[:,1].min() - 1,x_data[:,1].max() + 1
    32. #生成网格矩阵
    33. xx,yy = np.meshgrid(np.arange(x_min,x_max,0.02),
    34. np.arange(y_min,y_max,0.02))
    35. z = model.predict(np.c_[xx.ravel(),yy.ravel()])
    36. #扁平化,得到一个一个的点
    37. #ravel和flatten类似,多维数据转一维,flatten不会改变原始数据,而ravel会
    38. z = z.reshape(xx.shape)
    39. #等高线图
    40. #在这里,只有两个高度,0和1
    41. cs = plt.contourf(xx,yy,z)
    42. #样本散点图
    43. plt.scatter(x_data[:,0],x_data[:,1],c=y_data)
    44. plt.show()

    五、运行结果及分析


     

    六、总结


    线性分类器可解释性好,计算复杂度较低,不足之处是模型的拟合效果相对弱些。

    非线性分类器效果拟合能力较强,不足之处是数据量不足容易过拟合、计算复杂度高、可解释性不好。

  • 相关阅读:
    【Linux网络编程】epoll进阶之水平模式和边沿模式
    要么干要么滚!推特开始裁员了;深度学习产品应用·随书代码;可分离各种乐器音源的工具包;Transformer教程;前沿论文 | ShowMeAI资讯日报
    java计算机毕业设计网课系统源码+系统+mysql数据库+LW文档+部署文件
    mongodb的基本知识点
    数据治理是一个怎样的体系化的过程?_光点科技
    探索GPT-4V在学术领域的应用——无需编程即可阅读和理解科学论文
    一个简单的dw网页制作作业,学生个人html静态网页制作成品代码——怪盗基德动漫主题网页成品(15页)
    院内导航怎么实现?哪家技术好?医院导航移动导诊服务系统
    charles抓包
    Linux在线安装MySQL8.0.24安装、MySQL数据备份和恢复
  • 原文地址:https://blog.csdn.net/qq_50942093/article/details/128022984
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号