首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

人工智能_机器学习059_非线性核函数介绍---人工智能工作笔记0099

那么我们应该如何调整这个SVC的参数,也就是我们应该使用哪种核函数,比较合适呢?这取决于我们的数据,适合使用哪个核函数,正好我们有提供的score = accuracy_score(y_test,y_pred) 这样的评分函数,我们可以根据具体的评分情况,选择评分比较高的核函数来使用.

之前我们学习到的都是线性核函数,使用一条线来进行对数据进行划分,但是

可以看到如果是上面的这种数据的话,我们使用线性分类器是没必有办法进行数据的分类的对吧

我们可以使用代码去画一个这种的数据图出来可以看到这里import matplotlib.pyplot as plt 画图包X,y =datasets.make_circles(n_samples=100,factor=0.7)

`datasets.make_circles` 是一个Python函数,它来自scikit-learn库的`datasets`模块。这个函数用于生成一组模拟数据,其中的数据点表示为二维平面上的圆形。这里给出了函数调用的具体参数:- `n_samples`:指定生成的样本数量。在这个例子中,生成了100个样本点。- `factor`:这是决定圆的大小和圆心距离的一个参数。 factor 越大,生成的圆越小,并且圆心之间的距离也越近。这个因子是用来在半径和距离之间取得平衡的,factor = 0.7意味着生成的是比较小的圆。当执行上述代码时,它将返回两个列表:- `X`:包含生成圆心的横纵坐标,每个坐标都是一个`n_samples x 2`的二维数组。- `y`:包含每个圆心的标签,在这个例子中,y是一个`n_samples`长度的列表,每个元素都是0或1,表示两个不同类别的圆。这个函数通常用于机器学习中的数据准备,尤其是在需要示例化数据分布或者在分类任务中需要正负样本的时候。

display (X. shape, y. shape) 然后显示x和y的形状

(100,2)(100,)可以看到我们生成了100行2列的数据 2列表示2个类别的数据, 100行表示 100行数据然后100, 表示y的结果也是100个,不过y只有0和1 表示两个类别

y

我们使用plt.scatter(X[:,0],X[:,1],c=y)可以看到就可以画出图来了表示我们获取X的所有行,以及第一列,做为横轴,获取X的所有行以及第二列做为y轴然后用c=y

`plt.scatter` 是 Matplotlib 库中的一个函数,用于在二维平面上绘制散点图。这个函数的参数如下:- `X[:,0]`:这是第一个维度(通常是x轴)的值,X 是一个二维数组,`X[:,0]` 表示取X数组的第一列。- `X[:,1]`:这是第二个维度(通常是y轴)的值,X 是一个二维数组,`X[:,1]` 表示取X数组的第二列。- `c=y`:这是散点图的颜色映射,y 是一个长度与X相同的列表或数组,表示每个散点的颜色。每个元素的值对应于plt.scatter中定义的颜色映射。在这段代码中,X和y分别是生成圆心的横纵坐标和标签。plt.scatter(X[:,0],X[:,1],c=y) 会绘制100个散点,其中每个点的颜色由其标签决定。如果y[i]为0,则点(X[i,0], X[i,1])的颜色为一种颜色;如果y[i]为1,则点(X[i,0], X[i,1])的颜色为另一种颜色。这样就可以通过颜色区分两个类别的圆。

可以看到这里我们使用的c=y 表示使用y,这个数据,有两个类别对吧,来进行分割颜色,其实就是提供两种颜色显示上面我们又指定了plt.figure(figsize = 5,5) 可以看到这个是5,5 表示图形的大小,x轴,y轴的大小,设置好以后生成的就圆了,要不然是椭圆的,可以看到上面显示的.

然后我们可以给图形去添加一些噪声.添加噪声就是:X += np.random.randn(100,2) 我们从正太分布中拿出100行2列的数据来,拼接到X生成的100行2列的数据里面,现在的原来的X,就变成了X的每个数,都有相应的加减对应的数对吧,那么这个圆就不那么规则了,可以看到然后

不过加大了,很乱数据,然后我们再去调整一下X+= np.random.randn(100,2) * 0.03 可以看到结果,这里参数改成0.03对吧

可以看到已经添加了噪声了,然后我们再去看,我们给这两个类别的点,添加一下颜色,我们改成红色和蓝色

这个时候,我们需要用到from matplotlib.colors import ListedColormap 用这个来修改颜色

导入颜色处理包以后,我们cmap = ListedColormap(colors = ['red','blue'])可以看到这里添加了颜色以后,然后plt.scatter(X[:,0],X[:,1],c = y,cmap = cmap) 可以看到这里我们把刚刚设置好的颜色,赋值到这里,然后执行看到下面的数据,颜色就变了对吧

然后我们也可以换一下颜色,让外面是蓝色cmap = ListedColormap(colors = ['blue','red']) 这里修改一下就可以了.

然后我们再来看,我们开始用我们的模型来,进行这些数据的划分,首先我们用线性核函数svc=SVC(kermel='linear'))svc.fit(X,y)svc.score(X.y)

可以看到得到的结果是0.51对吧评分不高,因为,线性就表示一条线,我们看

我们的这些环形的数据是无法用一条线分开的对吧.

然后我们再来看poly核函数可以看到svc=SVC(kermel='poly')) 多项式回归svc.fit(X,y)svc.score(X.y)

可以看到数据升维以后,得到的分数0.69对吧,也不高

然后我们再来看,他还有一个参数,默认是 degree=3 对吧默认是3次幂

如果我们改成degree=2呢? 改成2次幂可以看到结果出奇的好对吧,可以完全分开,为什么呢?

我们可以考虑一下,我们是环形数据,那么就可以用一个环形把我们的数据分隔开.对吧,而f = x^2 +y^2 圆形的方程就是二次幂的对吧,可以看到所以,当degree=2的时候,实际上就可以容易的构造一个环来分割数据了.

可以看到如果degree=1 ,结果因为是一次幂了,所以跟linear是一样的了,评分都是0.51对吧

degree=2 因为是2次幂,圆也是2次幂,所以效果最好,得分百分百对吧.

然后再来看degree=6的时候,可以看到维度是6跟维度是2,其实是一样的对吧是2的整数倍结果就很好

然后我们再来看高斯分布rbf可以看到高斯分布的效果也挺好对吧.

  • 发表于:
  • 原文链接https://page.om.qq.com/page/OvQ_ftxZtfJvaUkuR0hEA8qA0
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券