如何使用Python Scikit-learn实现线性分类?
线性分类 是最简单的机器学习问题之一。为了实现线性分类,我们将使用sklearn的SGD(随机梯度下降)分类器来预测鸢尾花的品种。
步骤
您可以按照以下步骤使用Python Scikit-learn实现线性分类:
第1步 – 首先导入必要的包scikit-learn,NumPy和matplotlib。
第2步 – 加载数据集并从中构建训练和测试数据集。
第3步 – 使用matplotlib绘制训练实例。虽然这一步是可选的,但绘制实例可以增加可读性。
第4步 – 创建SGD分类器的对象,初始化其参数并使用fit()方法训练模型。
第5步 – 使用Python Scikit-learn库的度量包来评估结果。
示例
让我们看一下下面的例子,在其中我们将使用其两个特征即花萼宽度和花萼长度来预测鸢尾花的品种-
# 导入所需库
import sklearn
import numpy as np
import matplotlib.pyplot as plt
# %matplotlib inline
# 加载鸢尾花数据集
from sklearn import datasets
iris = datasets.load_iris()
X_data, y_data = iris.data, iris.target
# 打印iris数据形状
print ("原始数据集形状:",X_data.shape, y_data.shape)
# 将数据集分为训练集和测试集,并对特征进行标准化
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
# 只选择Iris数据集的前两个属性
X, y = X_data[:,:2], y_data
# 将数据集分成训练集和测试集(20%)
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.20, random_state=1)
print ("\n测试集的形状:", X_train.shape, y_train.shape)
# 对特征进行标准化
scaler = StandardScaler().fit(X_train)
X_train = scaler.transform(X_train)
X_test = scaler.transform(X_test)
# 绘制数据集
# 设置图形大小
plt.figure(figsize=(7.16, 3.50))
plt.subplots_adjust(bottom=0.05, top=0.9, left=0.05, right=0.95)
plt.title('训练实例', size ='18')
colors = ['orange', 'green', 'cyan']
for i in range(len(colors)):
px = X_train[:, 0][y_train == i]
py = X_train[:, 1][y_train == i]
plt.scatter(px, py, c=colors[i])
plt.legend(iris.target_names)
plt.xlabel('花萼长度')
plt.ylabel('花萼宽度')
plt.show()
# 创建线性模型SGDclassifier
from sklearn.linear_model import SGDClassifier
linear_clf = SGDClassifier()
# 使用fit()函数训练分类器
linear_clf.fit(X_train, y_train)
# 输出学习到的系数
print ("\n线性边界的系数为:", linear_clf.coef_)
print ("\n线性边界的截距为:",linear_clf.intercept_)
# 评估结果
from sklearn import metrics
y_train_pred = linear_clf.predict(X_train)
print ("\n分类器的准确率为:", metrics.accuracy_score(y_train, y_train_pred)*100)
输出
它将产生以下输出
原始数据集形状:(150, 4) (150,)
测试数据集形状:(120, 2) (120,)
线性边界的系数是:[[−28.85486061 13.42772422]
[ 2.54806641 −5.04803702]
[ 7.03088805 −0.73391906]]
线交点为:[−19.61738307 −3.54055412 −0.35387805]
分类器的准确度是:76.66666666666667