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 中使用具有多项式内核的支持向量分类器