↑↑↑关注后"星标"Datawhale
每日干货 & 每月组队学习,不错过
Datawhale干货
作者:李祖贤,深圳大学,Datawhale高校群成员
本次分享是基于scikit-learn工具包的基本分类方法,包括常见的Logisitic Regression、支持向量机、决策树、随机森林以及K近邻方法KNN。本文在基于读者已经基本了解这些基本算法的原理以及推导的基础上,使用sklearn工具包进行算法实践,如果大家没有掌握基本算法原理,文中也会给出一些优秀的链接方便大家学习。如果大家对基本分类算法的基本原理有需求,可以在评论区写下自己的需求,我们会根据大家的意见推出相应的分享。
机器学习算法主要步骤有:
选择特征并且收集并训练样本
选择度量性能的指标
选择分类器并优化算法
评估模型性能
调整算法
本次分享主要把目光聚集在"选择分类器并优化算法",我们将用学术界和工业界常用的机器学习库sklearn,对算法进行实践。
本文内容:
数据准备
逻辑回归
支持向量机
决策树
随机森林
KNN
1. 数据准备
我们使用鸢尾花数据集,进行分析考核可视化
# 引入数据
from sklearn import datasets
import numpy as np
iris = datasets.load_iris()
X = iris.data[:,[2,3]]
y = iris.target
print("Class labels:",np.unique(y)) #打印分类类别的种类
Class labels: [0 1 2]
切分训练数据和测试数据
# 切分训练数据和测试数据
from sklearn.model_selection import train_test_split
## 30%测试数据,70%训练数据,stratify=y表示训练数据和测试数据具有相同的类别比例
X_train,X_test,y_train,y_test = train_test_split(X,y,test_size=0.3,random_state=1,stratify=y)
数据标准化
from sklearn.preprocessing import StandardScaler
sc = StandardScaler()
## 估算训练数据中的mu和sigma
sc.fit(X_train)
## 使用训练数据中的mu和sigma对数据进行标准化
X_train_std = sc.transform(X_train)
X_test_std = sc.transform(X_test)
定制可视化函数:画出决策边界图(只有在2个特征才能画出来)
## 画出决策边界图(只有在2个特征才能画出来)
import matplotlib.pyplot as plt
%matplotlib inline
from matplotlib.colors import ListedColormap
def plot_decision_region(X,y,classifier,resolution=0.02):
markers = ('s','x','o','^','v')
colors = ('red','blue','lightgreen','gray','cyan')
cmap = ListedColormap(colors[:len(np.unique(y))])
# plot the decision surface
x1_min,x1_max = X[:,0].min()-1,X[:,0].max()+1
x2_min,x2_max = X[:,1].min()-1,X[:,1].max()+1
xx1,xx2 = np.meshgrid(np.arange(x1_min,x1_max,resolution),
np.arange(x2_min,x2_max,resolution))
Z = classifier.predict(np.array([xx1.ravel(),xx2.ravel()]).T)
Z = Z.reshape(xx1.shape)
plt.contourf(xx1,xx2,Z,alpha=0.3,cmap=cmap)
plt.xlim(xx1.min(),xx1.max())
plt.ylim(xx2.min(),xx2.max())
# plot class samples
for idx,cl in enumerate(np.unique(y)):
plt.scatter(x=X[y==cl,0],
y = X[y==cl,1],
alpha=0.8,
c=colors[idx],
marker = markers[idx],
label=cl,
edgecolors='black')
2. 基于逻辑回归的分类概率建模
2.1 原理介绍
可参考阅读:一文详尽系列之逻辑回归
2.2 参考文档详细解释
class sklearn.linear_model.LogisticRegression(penalty='l2', *, dual=False, tol=0.0001, C=1.0, fit_intercept=True, intercept_scaling=1, class_weight=None, random_state=None, solver='lbfgs', max_iter=100, multi_class='auto', verbose=0, warm_start=False, n_jobs=None, l1_ratio=None)
2.2.1可选参数
penalty:正则化方式,可选择‘l1’, ‘l2’, ‘elasticnet’, ‘none’,默认'l2'
dual:是否选择对偶,当n_samples> n_features时,首选dual = False
tol:算法停止的误差条件,默认是0.0001
C:正则强度的倒数;必须为正浮点数,较小的值指定更强的正则化,默认为1.0
fit_intercept:是否应将常量(也称为偏差或截距)添加到决策函数。默认是True。
intercept_scaling:不常用
class_weight:对类别进行加权,可以使用字典形式加权,输入‘balanced’代表权重为类别频率,默认是"None"。
random_state:选择随机种子,打乱样本时候指定。
solver:指定优化器类型,可选‘newton-cg’, ‘lbfgs’, ‘liblinear’, ‘sag’, ‘saga’
具体的优化方法参考:机器学习中的优化算法!
max_iter:算法收敛的最大迭代次数,默认100。
multi_class:不常用。
verbose:对于liblinear和lbfgs,求解器将verbose设置为任何正数以表示详细程度。
warm_start:不常用。
n_jobs:使用内核数。
l1_ratio:弹性网络参数,其中0 <= l1_ratio <=1。仅当penalty=“ elasticnet”时使用。