在Python虚拟环境下对鸢尾花数据集进行SVM线性分类

实验目的:使用python3.6/3.7、Anaconda 和 jupyter、spyder软件。创建一个名为 exam1的虚拟环境,在虚拟环境下安装 numpy、pandas、sklearn包, 并对鸢尾花Iris数据集进行SVM线性分类练习。
实验环境:Windows10,python3.x,Anaconda
参考资料:SVM线性分类
环境搭建

一、创建虚拟环境

第一种方法:
打开Anaconda控制台
输入

conda create -n sklearn python=3.6
//sklearn为虚拟机名字

然后就开始创建python3.6环境了
在这里插入图片描述
第二种方法:
打开Anaconda界面
在这里插入图片描述
在这里插入图片描述
创建好之后,下载包
进入控制台

activate
conda activate sklearn

激活后,下载三个包

pip install numpy -i "https://pypi.doubanio.com/simple/"
pip install pandas -i "https://pypi.doubanio.com/simple/"
pip install sklearn -i "https://pypi.doubanio.com/simple/"
//在 anaconda 内下载安装包,可以使用 pip 或 conda 来下载。
//pip 命令格式:pip install [your_package] -i “https://pypi.doubanio.com/simple/”
//conda 命令格式:conda install [your_package]
//推荐使用 pip ,后面的网址是国内的镜像,下载速度快,稳定性高。

安装成功会是以下结果(其余类似)
在这里插入图片描述
环境创建完毕。

二、支持向量机

打开Jupyter,可以从开始菜单找到。
在这里插入图片描述
问题:选择第二个会出错,第一个会成功

创建python3的文件
在这里插入图片描述
写入以下代码
(1)未经标准化的原始模型:

import numpy as np
import matplotlib.pyplot as plt
from sklearn import datasets
from sklearn.preprocessing import StandardScaler
from sklearn.svm import LinearSVC

iris = datasets.load_iris()
X = iris.data
y = iris.target

X = X [y<2,:2] # 只取y<2的类别,也就是0 1 并且只取前两个特征
y = y[y<2] # 只取y<2的类别

# 分别画出类别 01 的点
plt.scatter(X[y==0,0],X[y==0,1],color='red')
plt.scatter(X[y==1,0],X[y==1,1],color='blue')
plt.show()

运行
在这里插入图片描述
控制台的日志
在这里插入图片描述
(2)训练标准化模型(在上面代码添加)

# 标准化
standardScaler = StandardScaler()
standardScaler.fit(X)

# 计算训练数据的均值和方差
X_standard = standardScaler.transform(X) # 再用 scaler 中的均值和方差来转换 X ,使 X 标准化
svc = LinearSVC(C=1e9) # 线性 SVM 分类器
svc.fit(X_standard,y) # 训练svm

在这里插入图片描述
(3)绘制决策边界

import numpy as np
import matplotlib.pyplot as plt
from sklearn import datasets
from sklearn.preprocessing import StandardScaler
from sklearn.svm import LinearSVC
from matplotlib.colors import ListedColormap # 导入 ListedColormap 包

iris = datasets.load_iris()
X = iris.data
y = iris.target

X = X [y<2,:2] # 只取y<2的类别,也就是0 1 并且只取前两个特征
y = y[y<2] # 只取y<2的类别

# 分别画出类别 01 的点
plt.scatter(X[y==0,0],X[y==0,1],color='red')
plt.scatter(X[y==1,0],X[y==1,1],color='blue')
plt.show()

# 标准化
standardScaler = StandardScaler()
standardScaler.fit(X)

# 计算训练数据的均值和方差
X_standard = standardScaler.transform(X) # 再用 scaler 中的均值和方差来转换 X ,使 X 标准化
svc = LinearSVC(C=1e9) # 线性 SVM 分类器
svc.fit(X_standard,y) # 训练svm

def plot_decision_boundary(model, axis): 
	x0, x1 = np.meshgrid( np.linspace(axis[0], axis[1],int((axis[1]-axis[0])*100)).reshape(-1,1),
                         np.linspace(axis[2], axis[3],int((axis[3]-axis[2])*100)).reshape(-1,1)
                        )    
	X_new = np.c_[x0.ravel(), x1.ravel()] 
	y_predict = model.predict(X_new) 
	zz = y_predict.reshape(x0.shape) 
	custom_cmap = ListedColormap(['#EF9A9A','#FFF59D','#90CAF9']) 
	plt.contourf(x0, x1, zz, cmap=custom_cmap) #绘制决策边界     
    
plot_decision_boundary(svc,axis=[-3,3,-3,3]) # x,y轴都在-33之间 

# 绘制原始数据
plt.scatter(X_standard[y==0,0],X_standard[y==0,1],color='red') 
plt.scatter(X_standard[y==1,0],X_standard[y==1,1],color='blue') 
plt.show()

svc2 = LinearSVC(C=0.01)#设置了 C 值,可以与上面的代码进行对比
svc2.fit(X_standard,y)
plot_decision_boundary(svc2,axis=[-3,3,-3,3]) # x,y轴都在-33之间
# 绘制原始数据
plt.scatter(X_standard[y==0,0],X_standard[y==0,1],color='red')
plt.scatter(X_standard[y==1,0],X_standard[y==1,1],color='blue')
plt.show()

在这里插入图片描述

  • 2
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值