非线性二分类——机器学习

目录

一、算法思想

二、算法原理

三、算法分析

四、源程序代码

五、运行结果及分析

六、总结


一、算法思想


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

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

二、算法原理


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

 

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

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

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

三、算法分析


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

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

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

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

四、源程序代码



import matplotlib.pyplot as plt
import numpy as np
from sklearn.metrics import classification_report
from sklearn import tree
from sklearn.model_selection import train_test_split
import graphviz
#载入数据
data = np.genfromtxt('test2.csv',delimiter=',')
x_data = data[:,:-1]
y_data = data[:,-1]
plt.scatter(x_data[:,0],x_data[:,-1],c=y_data)
plt.show()
#分割数据
x_train,x_test,y_train,y_test = train_test_split(x_data,y_data)
#创建决策树模型
model = tree.DecisionTreeClassifier()
model.fit(x_data,y_data)
#导出决策树
dot_data = tree.export_graphviz(model,
                                out_file=None,
                                #特征的名字,要设置
                                feature_names = ['x','y'],
                                class_names=['label0','label1'],
                                filled=True,
                                rounded=True,
                                special_characters=True)
graph = graphviz.Source(dot_data)
graph.render('cart_1')
#获取数据值所在范围
x_min,x_max = x_data[:,0].min() - 1,x_data[:,0].max() + 1
y_min,y_max = x_data[:,1].min() - 1,x_data[:,1].max() + 1
#生成网格矩阵
xx,yy = np.meshgrid(np.arange(x_min,x_max,0.02),
                    np.arange(y_min,y_max,0.02))
z = model.predict(np.c_[xx.ravel(),yy.ravel()])
#扁平化,得到一个一个的点
#ravel和flatten类似,多维数据转一维,flatten不会改变原始数据,而ravel会
z = z.reshape(xx.shape)
#等高线图
#在这里,只有两个高度,0和1
cs = plt.contourf(xx,yy,z)
#样本散点图
plt.scatter(x_data[:,0],x_data[:,1],c=y_data)
plt.show()

五、运行结果及分析


 

六、总结


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

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

会做饭的网络工程师

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

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

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

打赏作者

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

抵扣说明:

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

余额充值