总所周知,机器学习学习随着近年来的人工智能的出现逐渐火爆起来,而一般的机器学习任务又分为监督学习和非监督学习,这在这里我先讲到监督学习,监督学习的任务一般分为两种,一种是我前面提到的回归模型用于预测和评价,另一种是分类,给变量贴标签,在机器学习中,分类是一种常见的任务。分类算法将数据分为不同的类别,从而对数据进行预测和判断。下面将介绍几种常用的分类算法。

一、决策树

决策树是一种基于树形结构来进行决策的算法。它通过将数据集分成许多小的子集,每个子集都关联一个决策树节点来实现分类。每次分割时,算法会选择一个最优的特征来切分数据集,直到叶子节点只包含单一类别的实例。

二、朴素贝叶斯

朴素贝叶斯是一种基于贝叶斯定理的算法。它假设每个特征都是独立的,并且每个特征对于分类结果的影响是相同的。通过统计训练数据中的每个特征出现的频率以及其与每个类别之间的关系,可以计算出给定某个特征时,属于每个类别的概率。最终,算法将数据分为具有最高概率的类别。

三、支持向量机

支持向量机是一种经典的分类算法。它通过寻找一个能够最大化边缘(即最大限度地将两个类别分开)的超平面来实现分类。支持向量机可以处理非线性可分数据,通过核函数将数据映射到高维空间,从而使其在新的空间中变得线性可分。

四、K近邻算法

K近邻算法是一种基于实例的学习方法。它将数据集中所有的实例都作为类别标记,当需要预测新的实例时,算法会根据其与最近邻实例的距离来确定其属于哪个类别。具体来说,K近邻算法将新实例的K个最近邻居作为参考,并根据它们所属的类别进行投票。

五、Logistic回归算法
当处理二分类问题时,Logistic回归是一种广泛使用的分类算法。该算法通过计算输入特征的加权和,并应用一个sigmoid函数将结果映射到0~1之间的概率值范围内来进行预测。这个概率阈值通常设置为0.5,如果预测概率大于这个值,则该样本被分到正类别;否则,被分到负类别。

以下给出各个算法的具体实现代码
决策树
决策树是一种基于树形结构来进行决策的算法。它通过将数据集分成许多小的子集,每个子集都关联一个决策树节点来实现分类。每次分割时,算法会选择一个最优的特征来切分数据集,直到叶子节点只包含单一类别的实例。

Python代码
from sklearn.datasets import load_iris
from sklearn.tree import DecisionTreeClassifier

加载鸢尾花数据集

iris = load_iris()
X = iris.data
y = iris.target

训练决策树模型

tree_clf = DecisionTreeClassifier(max_depth=2)
tree_clf.fit(X, y)

R语言代码
#决策树(Decision Tree)

读取数据

iris <- read.csv(“https://archive.ics.uci.edu/ml/machine-learning-databases/iris/iris.data”, header=FALSE)

命名列

names(iris) <- c(“Sepal_Length”, “Sepal_Width”, “Petal_Length”, “Petal_Width”, “Species”)

数据清洗

iris S p e c i e s < − f a c t o r ( i r i s Species <- factor(iris Species<factor(irisSpecies)

将数据拆分为训练集和测试集

library(caTools)
set.seed(123)
split <- sample.split(iris$Species, SplitRatio=0.7)
train <- iris[split,]
test <- iris[!split,]

建立决策树模型

library(rpart)
fit <- rpart(Species ~ Sepal_Length + Sepal_Width + Petal_Length + Petal_Width, method=“class”, data=train)

可视化决策树

library(rpart.plot)
rpart.plot(fit, type=4, extra=102, under=TRUE)

预测测试集

pred <- predict(fit, newdata=test, type=“class”)

计算准确率

accuracy <- mean(pred == test$Species)
print(paste(“Accuracy:”, accuracy))

朴素贝叶斯
朴素贝叶斯是一种基于贝叶斯定理的算法。它假设每个特征都是独立的,并且每个特征对于分类结果的影响是相同的。通过统计训练数据中的每个特征出现的频率以及其与每个类别之间的关系,可以计算出给定某个特征时,属于每个类别的概率。最终,算法将数据分为具有最高概率的类别。

Python代码
from sklearn.datasets import load_iris
from sklearn.naive_bayes import GaussianNB
from sklearn.metrics import accuracy_score

iris = load_iris()
X = iris.data
y = iris.target
gnb = GaussianNB()
gnb.fit(X, y)
y_pred = gnb.predict(X)
accuracy_score(y, y_pred)
R语言代码

朴素贝叶斯(Naive Bayes)

library(e1071)
data(iris)
iris <- data.frame(iris)
iris S p e c i e s < − a s . f a c t o r ( i r i s Species <- as.factor(iris Species<as.factor(irisSpecies)
fit <- naiveBayes(Species ~ ., data=iris)
summary(fit)

支持向量机
支持向量机是一种经典的分类算法。它通过寻找一个能够最大化边缘(即最大限度地将两个类别分开)的超平面来实现分类。支持向量机可以处理非线性可分数据,通过核函数将数据映射到高维空间,从而使其在新的空间中变得线性可分。

Python代码
from sklearn.datasets import load_iris
from sklearn.svm import SVC

加载鸢尾花数据集

iris = load_iris()
X = iris.data
y = iris.target

训练支持向量机模型

svm_clf = SVC(kernel=“linear”)
svm_clf.fit(X, y)

svm_clf = SVC(kernel=“rbf”)
svm_clf.fit(X, y)
R语言代码

支持向量机(Support Vector Machines)

导入数据集

data(iris)

划分训练集和测试集

library(caTools)
set.seed(123)
split <- sample.split(iris$Species, SplitRatio=0.7)
train <- iris[split,]
test <- iris[!split,]

建立SVM模型

library(e1071)
fit <- svm(Species ~ ., data=train)

在训练集上预测

pred_train <- predict(fit, train)
table(train$Species, pred_train)

在测试集上预测

pred_test <- predict(fit, test)
table(test$Species, pred_test)

计算准确率

accuracy <- mean(pred_test == test$Species)
print(paste(“Accuracy:”, accuracy))

K近邻
K近邻算法是一种基于实例的学习方法。它将数据集中所有的实例都作为类别标记,当需要预测新的实例时,算法会根据其与最近邻实例的距离来确定其属于哪个类别。具体来说,K近邻算法将新实例的K个最近邻居作为参考,并根据它们所属的类别进行投票。

Python代码
from sklearn.datasets import load_iris
from sklearn.neighbors import KNeighborsClassifier
from sklearn.metrics import accuracy_score
from sklearn.model_selection import train_test_split

iris = load_iris()
X = iris.data
y = iris.target
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3)
knn = KNeighborsClassifier(n_neighbors=3)
knn.fit(X_train, y_train)
y_pred = knn.predict(X_test)
accuracy_score(y_test, y_pred)

R语言代码

K近邻(K-Nearest Neighbors)

library(class)
data(iris)
iris <- data.frame(iris)
iris S p e c i e s < − a s . f a c t o r ( i r i s Species <- as.factor(iris Species<as.factor(irisSpecies)
set.seed(123)
train.index <- sample(1:nrow(iris), 0.7*nrow(iris))
train.data <- iris[train.index, ]
test.data <- iris[-train.index, ]
fit <- knn(train=train.data[, -5], test=test.data[, -5], cl=train.data[, 5], k=3)
table(Predicted=fit, True=test.data[, 5])

Logistics回归
当处理二分类问题时,Logistic回归是一种广泛使用的分类算法。该算法通过计算输入特征的加权和,并应用一个sigmoid函数将结果映射到0~1之间的概率值范围内来进行预测。这个概率阈值通常设置为0.5,如果预测概率大于这个值,则该样本被分到正类别;否则,被分到负类别。

Python代码
import pandas as pd
from sklearn import datasets, linear_model

wine = pd.read_csv(“https://archive.ics.uci.edu/ml/machine-learning-databases/wine-quality/winequality-white.csv”, sep=‘;’)
wine[‘quality’] = wine[‘quality’].apply(lambda x: 1 if x >= 6 else 0)
X = wine.drop([‘quality’], axis=1)
y = wine.quality
regr = linear_model.LogisticRegression()
regr.fit(X, y)
print(‘Coefficients: \n’, regr.coef_)

R语言代码
#逻辑回归(Logistic Regression)

读取数据

data(iris)

将数据分为训练集和测试集

set.seed(123)
samp <- sample(nrow(iris), 0.7 * nrow(iris))
train <- iris[samp, ]
test <- iris[-samp, ]

建立逻辑回归模型

fit <- glm(Species ~ ., data=train, family=“binomial”)

预测测试集

prob <- predict(fit, newdata=test, type=“response”)
pred <- ifelse(prob > 0.5, “virginica”, “not_virginica”)

计算准确率

accuracy <- mean(pred == test$Species)
print(paste(“Accuracy:”, accuracy))

更多推荐