scikit-learn库的安装及使用,以支持向量机svm为例

Posted 小哈里

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了scikit-learn库的安装及使用,以支持向量机svm为例相关的知识,希望对你有一定的参考价值。

1、什么是scikit-learn

什么是scikit-learn?

  • scikit-learn的简称是sklearn,是一个专门用于机器学习的python模块。
  • 包含了分类,回归,无监督,数据降维,数据预处理等等,常见的大部分机器学习方法
  • sklearn有着强大数据库,很多数据,可以直接拿来使用。鸢尾花数据集,波士顿房价等等

如何安装scikit-learn?

  • 你可以直接使用pip安装它
pip install scikit-learn -i http://pypi.douban.com/simple --trusted-host pypi.douban.com
  • 也可以通过Anaconda安装它
    https://gwj1314.blog.csdn.net/article/details/120818390

  • 也可以使用conda安装它

conda install scikit-learn

2、支持向量机svm的使用

在python中使用scikit-learn可以直接 import sklearn
在scikit-learn中使用模型,一般包括定义数据,定义模型,训练模型,预测结果这几个步骤。

1、简单的例子

原理:记录点所在的原始空间,通过一些可选的函数变换到另一空间,使得在新空间中大大化简原始分类任务。

#导入支持向量机svm模块
from sklearn import svm

# 1, 定义训练数据集
# 特征值X包括两条记录,每条记录都具有2个特征
# 数据标注标签y包括了上面两条记录的标签,分别是0和1
X = [[0, 0], [1, 1]]
y = [0, 1]

# 2, 定义模型并训练
# 定义了一个支持向量机分类器,使用默认的模型参数进行初始化
# 使用fit()函数在特征值X和标签y下进行了训练拟合
clf = svm.SVC()
clf.fit(X, y)

# 3, 使用模型预测结果
# 根据已经有的训练数据和训练好的支持向量机模型,预测[2,2]对应的标签
# 结果应该为[1]
l = clf.predict([[2, 2]])
print (l)

2、官方Iris数据集

详细数据请见:https://zh.wikipedia.org/wiki/%E5%AE%89%E5%BE%B7%E6%A3%AE%E9%B8%A2%E5%B0%BE%E8%8A%B1%E5%8D%89%E6%95%B0%E6%8D%AE%E9%9B%86

数据包含:
4个鸢尾花特征(花萼长度,花萼宽度,花瓣长度,花瓣宽度)
3个鸢尾花种属(山鸢尾setosa、变色鸢尾versicolor和维吉尼亚鸢尾virginica)

训练目标:
基于这四个特征的集合,建立一个模型分析以确定其种属。

# 加载包
import numpy as np
import matplotlib.pyplot as plt
from sklearn import svm, datasets

# 1、加载数据
iris = datasets.load_iris()
X = iris.data[:, :2] # 特征X保留全部行,只保留前两列,即Sepal length和Sepal width
y = iris.target # 标签y

# 2、训练四个SVM模型
C = 1.0 # C为SVM模型的正则化参数
svc = svm.SVC(kernel='linear', C=C).fit(X, y)# 线形核函数
rbf_svc = svm.SVC(kernel='rbf', gamma=0.7, C=C).fit(X, y)# RBF核函数
poly_svc = svm.SVC(kernel='poly', degree=3, C=C).fit(X, y)# 多项式核函数
lin_svc = svm.LinearSVC(C=C).fit(X, y)# 线性SVM

# 3、绘制图像
# 选择x、y范围,分别为Sepal length范围和Sepal width范围
# 将x、y范围网格化,生成一个二维数组
h = .02
x_min, x_max = X[:, 0].min() - 1, X[:, 0].max() + 1
y_min, y_max = X[:, 1].min() - 1, X[:, 1].max() + 1
xx, yy = np.meshgrid(np.arange(x_min, x_max, h), np.arange(y_min, y_max, h))

# 四个绘图标题
titles = ['SVC with linear kernel', 'LinearSVC (linear kernel)', 'SVC with RBF kernel', 'SVC with polynomial (degree 3) kernel']
# 分别绘制四个SVM模型的分类结果
for i, clf in enumerate((svc, lin_svc, rbf_svc, poly_svc)):
  # 选择对应的子图
  plt.subplot(2, 2, i + 1)
  plt.subplots_adjust(wspace=0.4, hspace=0.4)

  # 对网格数据进行预测并绘制相应的区域
  Z = clf.predict(np.c_[xx.ravel(), yy.ravel()])
  Z = Z.reshape(xx.shape)
  plt.contourf(xx, yy, Z, cmap=plt.cm.coolwarm, alpha=0.8)

  # 将训练集中的记录绘制成散点并根据标签着色
  plt.scatter(X[:, 0], X[:, 1], c=y, cmap=plt.cm.coolwarm)
  plt.xlabel('Sepal length')
  plt.ylabel('Sepal width')
  plt.xlim(xx.min(), xx.max())
  plt.ylim(yy.min(), yy.max())
  plt.xticks(())
  plt.yticks(())
  plt.title(titles[i])

# 显示绘图结果
plt.show()

以上是关于scikit-learn库的安装及使用,以支持向量机svm为例的主要内容,如果未能解决你的问题,请参考以下文章

使用 scikit-learn 对多类支持向量机进行参数优化

在 scikit-learn 中使用具有多项式内核的支持向量分类器

02-35 scikit-learn库之支持向量机

想要在不使用 Scikit-Learn 的情况下在 python 中构建支持向量机的真正建议 [关闭]

scikit-learn:支持向量机。精度和/或准确度?

机器学习二十三:scikit-learn 支持向量机算法库总结