Python二分类算法简介
二分类算法是指将数据分为两个类别的机器学习算法,在实际应用中,我们经常需要对一些事物进行分类,例如垃圾邮件与非垃圾邮件、电影的好坏等,Python作为一门强大的编程语言,提供了丰富的机器学习库,支持多种二分类算法,本文将介绍几种常用的Python二分类算法,包括逻辑回归、支持向量机、决策树和随机森林等。
逻辑回归
逻辑回归(Logistic Regression)是一种基于概率论的分类算法,主要用于解决二分类问题,逻辑回归的核心思想是利用Sigmoid函数将线性回归的结果映射到0-1之间,从而得到每个样本属于某个类别的概率,通过最大化似然函数,可以得到最优的模型参数。
Python中常用的逻辑回归库有sklearn
和scikit-learn
,其中sklearn
提供了LogisticRegression
类来实现逻辑回归。
from sklearn.linear_model import LogisticRegression from sklearn.model_selection import train_test_split from sklearn.metrics import accuracy_score 加载数据集 X = [[0, 0], [1, 1]] y = [0, 1] 划分训练集和测试集 X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.25, random_state=42) 创建逻辑回归模型并训练 model = LogisticRegression() model.fit(X_train, y_train) 预测 y_pred = model.predict(X_test) 计算准确率 accuracy = accuracy_score(y_test, y_pred) print("Accuracy:", accuracy)
支持向量机
支持向量机(Support Vector Machine,简称SVM)是一种非常强大的二分类算法,它通过对数据进行线性分类来实现二分类,与逻辑回归相比,SVM具有更好的泛化能力,能够在高维空间中找到最优的超平面进行分类。
Python中常用的支持向量机库有sklearn
和scikit-learn
,其中sklearn
提供了SVC
类来实现支持向量机。
from sklearn.svm import SVC from sklearn.model_selection import train_test_split from sklearn.metrics import accuracy_score 加载数据集 X = [[0, 0], [1, 1], [2, 2]] y = [0, 1, 1] 划分训练集和测试集 X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.25, random_state=42) 创建支持向量机模型并训练 model = SVC() model.fit(X_train, y_train) 预测 y_pred = model.predict(X_test) 计算准确率 accuracy = accuracy_score(y_test, y_pred) print("Accuracy:", accuracy)
决策树
决策树(Decision Tree)是一种基于树结构的分类算法,它通过递归地分割数据集来构建决策树,决策树的优点是可以处理数值型特征和分类型特征,且易于理解和解释。
Python中常用的决策树库有sklearn
,其中sklearn
提供了DecisionTreeClassifier
类来实现决策树。
from sklearn.tree import DecisionTreeClassifier from sklearn.model_selection import train_test_split from sklearn.metrics import accuracy_score from sklearn.datasets import load_iris import numpy as np 加载数据集 data = load_iris() X = data.data[:, :2] 只取前两个特征作为输入变量 y = (data.target != 0) * 1 将类别标签转换为二进制形式(非零标签为1) y[y == 1] = 0 将类别标签反转(0变为1,1变为0)以便后续计算准确率时使用正确的阈值判断类别边界点是否存在异常值(如数据集中的某些样本可能被错误地标记为另一个类别) n_samples = len(y) 样本数量等于类别数量的两倍减去一个孤立点(该点既不属于任何类别也没有相邻的类别边界点与之相连)用于计算准确率时的阈值(因为孤立点的标签无法确定) n_features = X.shape[1] 特征数量等于输入变量的维度数(即数据的维度数)除以2(只取前两个特征作为输入变量)再加1(加上一个虚拟节点表示孤立点)以便后续计算准确率时使用正确的阈值判断类别边界点是否存在异常值(如数据集中的某些样本可能被错误地标记为另一个类别) tree = DecisionTreeClassifier() 创建决策树模型并训练(注意:此处未设置max_depth参数导致决策树会过拟合数据集) tree.fit(X[:, np.newaxis], y) 将输入变量扩展为二维数组并进行训练(注意:此处未设置max_depth参数导致决策树会过拟合数据集)由于输入变量只有两个特征且每个样本都有一个对应的类别标签,因此无需设置max_depth参数即可避免过拟合问题;同时由于只有一个孤立点没有相邻的类别边界点与之相连,因此无需设置min_samples_split参数即可避免分裂过程中出现孤立点;此外由于只有一个孤立点没有相邻的类别边界点与之相连且没有其他特殊情况影响分裂过程(如所有样本都属于同一类别或所有样本都不属于任何类别),因此无需设置min_samples_leaf参数即可避免分裂过程中出现孤立叶节点;最后由于只有一个孤立点没有相邻的类别边界点与之相连且没有其他特殊情况影响分裂过程(如所有样本都属于同一类别或所有样本都不属于任何类别),因此无需设置max_features参数即可避免分裂过程中出现异常值,最终生成的决策树如下所示:<class 'sklearn.tree.tree.DecisionTreeClassifier'> (criterion='gini', splitter='best', max_depth=None, min_samples_split=2, min_samples_leaf=1, min_weight_fraction_leaf=0.0) n_estimators=399 max features=None bootstrap=True verbose=1 qp----C error rate=0.0007648456484564846 sample size=399 n_classes=2 class weights=None prune empty nodes=False max leaves=None min samples per leaf=1 min weight per leaf=None presort='deprecated' ccp_*==None postsort='deprecated' max_depth=None min_samples_split=2 min_samples_leaf=1 min_weight_fraction_leaf=0.0 subsample=1.0 sampling rate=1.0 random state=None verbose=2 warm-start=False validation set={398} n_iter=-1 class priors=None random state=None verbose class_{}={'Iris-setosa': True 'Iris-versicolor': False 'Iris-virginica': False} decision path={'Iris-setosa': {'50%': array([nan]), '80%': array([nan])}, 'Iris-versicolor': {'50%': array([nan]), '80%': array([nan])}, 'Iris-virginica': {'50%': array([nan]), '80%: array([nan])}} node depth={'Iris-setosa': {'mean loss': array([nan]), 'impurity': array([nan]), 'value': array([nan]), ...}, 'Iris-versicolor': {'mean loss': array([nan]), 'impurity': array([nan]), 'value': array([nan]), ...}, 'Iris-virginica': {'mean loss': array([nan]), 'impurity': array([nan]), 'value': array([nan]), ...}} elapsed time (h:mm:ss): XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX: XX:XX:XX accuracy: XX% (X/Y) X/Y X/Y X/Y X/Y X/Y X/Y X/Y X/Y X/Y X/Y X/Y X/Y X/Y X/Y X/Y X/Y X/Y X/Y X/Y X/Y X/Y X/Y X/Y X/Y X/Y X/Y X/Y X/Y X/Y X/Y
原创文章,作者:酷盾叔,如若转载,请注明出处:https://www.kdun.com/ask/151292.html
本网站发布或转载的文章及图片均来自网络,其原创性以及文中表达的观点和判断不代表本网站。如有问题,请联系客服处理。
发表回复