R语言 监督和非监督学习

R语言 监督和非监督学习

阿瑟-塞缪尔 ,人工智能和计算机游戏领域的先驱,创造了 ” 机器学习 “一词。他将机器学习定义为– ” 使计算机有能力在没有明确编程的情况下学习的研究领域 “。以一种非常通俗的方式, 机器学习 (ML)可以被解释为根据计算机的经验,在没有实际编程的情况下,也就是在没有任何人类协助的情况下,实现计算机学习过程的自动化和改进。这个过程始于提供高质量的数据,然后通过使用数据和不同的算法建立机器学习模型来训练我们的机器(计算机)。算法的选择取决于我们有什么类型的数据,以及我们试图自动化的任务是什么。主要有 四种 类型的学习 。

R编程中的监督和非监督学习

在这篇文章中,让我们来讨论两种最重要的学习方式,如R编程中的监督和无监督学习。

R语言基本上是由统计学家开发的,用于帮助其他统计学家和开发人员更快、更有效地处理数据。到 目前为止,我们知道机器学习基本上是在处理大量的数据和统计,作为数据科学的一部分,R语言的使用总是被推荐。因此,对于那些从事机器学习的人来说,R语言大多变得很方便,使任务更容易、更快、更有创新性。下面是 R语言在R编程中实现机器学习算法 的一些顶级优势 。

使用R语言实现机器学习的优势

  • 它提供了良好的解释性代码。例如,如果你处于机器学习项目的早期工作阶段,你需要解释你所做的工作,与python语言相比,用R语言工作变得很容易,因为它提供了适当的统计方法,以较少的代码行来处理数据。
  • R语言是数据可视化的完美选择。R语言为机器学习模型的工作提供了最好的原型。
  • R语言有最好的工具和库包来处理机器学习项目。开发人员可以使用这些包来创建机器学习项目的最佳前模型、模型和后模型。此外,R语言的软件包比python语言更先进、更广泛,这使得它成为机器学习项目工作的首选。

监督学习

监督学习 ,顾名思义,就是有一个监督者作为老师。基本上,监督学习是一种学习,在这种学习中,我们使用 标记好的 数据教导或训练机器 ,这意味着一些数据已经被标记为正确的答案。之后,向机器提供一组新的例子(数据),这样 监督学习算法就会分析训练数据(训练例子集),并从标记的数据中产生一个正确的结果。 监督学习被分为两类算法。

  • 分类 :分类问题是指输出变量是一个类别,如 “红色 “或 “蓝色 “或 “疾病 “和 “无疾病”。
  • 回归 :回归问题是指输出变量是一个实际数值,如 “美元 “或 “重量”。

监督学习处理或学习 “标记的 “数据。这意味着一些数据已经被贴上了正确答案的标签。

类型

  • 回归
  • Logistic回归
  • 分类法
  • Naïve Bayes分类器
  • 决策树
  • 支持向量机

R语言 的实现

让我们在R编程中实现一个非常流行的监督学习,即简单线性回归。简单线性回归是一种统计方法,允许我们总结和研究两个连续(定量)变量之间的关系。一个变量表示为x,被视为自变量, 另一个变量表示为y,被视为因变量。我们假设这两个变量是线性关系。因此,我们试图找到一个线性函数,尽可能准确地预测响应值(y)与特征或自变量(x)的关系。R语言中回归分析的基本语法是 。

语法

lm(Y ~ model)

其中

Y 是包含要预测的因变量的对象,model是所选数学模型的公式 。

命令 lm() 提供模型的系数,但没有进一步的统计信息。下面的R代码用于实现 简单的线性回归

例子

# Simple Linear Regression
# Importing the dataset
dataset = read.csv('salary.csv')
 
# Splitting the dataset into the
# Training set and Test set
install.packages('caTools')
library(caTools)
split = sample.split(datasetSalary,
                     SplitRatio = 0.7)
trainingset = subset(dataset, split == TRUE)
testset = subset(dataset, split == FALSE)
 
# Fitting Simple Linear Regression
# to the Training set
lm.r = lm(formula = Salary ~ YearsExperience,
                          data = trainingset)
coef(lm.r)
 
# Predicting the Test set results
ypred = predict(lm.r, newdata = testset)
 
install.packages("ggplot2")
library(ggplot2)
 
# Visualising the Training set results
ggplot() + geom_point(aes(x = trainingsetYearsExperience,
                          y = trainingsetSalary),
                          colour = 'red') +
           geom_line(aes(x = trainingsetYearsExperience,
                         y = predict(lm.r, newdata = trainingset)),
                         colour = 'blue') +
         
ggtitle('Salary vs Experience (Training set)') +
xlab('Years of experience') +
ylab('Salary')
 
# Visualising the Test set results
ggplot() + geom_point(aes(x = testsetYearsExperience,
                          y = testsetSalary),
                          colour = 'red') +
           geom_line(aes(x = trainingset$YearsExperience,
                         y = predict(lm.r, newdata = trainingset)),
                         colour = 'blue') +
 
ggtitle('Salary vs Experience (Test set)') +
xlab('Years of experience') +
ylab('Salary')
R

输出

Intercept YearsExperience
24558.39 10639.23
R

训练集结果的可视化

R编程中的监督和非监督学习

测试集结果 的可视化。

R编程中的监督和非监督学习

无监督学习

R - 无监督学习 是使用既未分类也未标记的信息来训练机器,并允许算法在没有指导的情况下对这些信息采取行动。在这里,机器的任务是根据相似性、模式和差异对未分类的信息进行分组,而无需事先对数据进行任何训练。与监督学习不同的是,没有提供教师,也就是说没有给机器提供训练。因此,机器只能靠我们自己去寻找无标签数据中的隐藏结构。无监督学习被分为两类算法。

  • 聚类 :聚类问题是指你想发现数据中固有的分组,如按购买行为将客户分组。
  • 关联 :关联规则学习问题是指你想发现描述大部分数据的规则,如购买X的人也倾向于购买Y。

类型

分组

  1. 排他性的(分区)。
  2. 聚合型
  3. 重叠式
  4. 概率性的

聚类类型

  1. 分层聚类
  2. K-means聚类
  3. K-NN(K近邻)
  4. 主成分分析
  5. 奇异值分解
  6. 独立成分分析

R语言 实现K-means聚类

让我们来实现一个非常流行的无监督学习,即R编程中的K-means聚类。R编程中的 K手段聚类是一种无监督的非线性算法,它 基于相似性或类似的群体对数据 进行聚类。它试图将观察结果划分为预先指定的若干个聚类。对数据进行分割是为了将每个训练实例分配到一个叫做聚类的部分。在无监督算法中,对原始数据的依赖程度很高,为审查相关性而进行的人工审查支出很大。它被用于各种领域,如银行、医疗、零售、媒体等。

语法: Kmeans(x, centers = 3, nstart = 10)

其中

  • x是数字数据
  • centers是预先定义的集群数量
  • k-means算法有一个随机成分,可以重复nstart次以改进返回的模型。

例子

# Installing Packages
install.packages("ClusterR")
install.packages("cluster")
 
# Loading package
library(ClusterR)
library(cluster)
 
# Loading data
data(iris)
    
# Structure 
str(iris)
 
# Removing initial label of
# Species from original dataset
iris_1 <- iris[, -5]
 
# Fitting K-Means clustering Model
# to training dataset
set.seed(240) # Setting seed
kmeans.re <- kmeans(iris_1, centers = 3,
                            nstart = 20)
kmeans.re
 
# Cluster identification for
# each observation
kmeans.recluster
 
# Confusion Matrix
cm <- table(irisSpecies, kmeans.recluster)
cm
 
# Model Evaluation and visualization
plot(iris_1[c("Sepal.Length", "Sepal.Width")])
plot(iris_1[c("Sepal.Length", "Sepal.Width")],
            col = kmeans.recluster)
plot(iris_1[c("Sepal.Length", "Sepal.Width")],
               col = kmeans.recluster,
               main = "K-means with 3 clusters")
 
# Plotiing cluster centers
kmeans.recenters
kmeans.recenters[, c("Sepal.Length",
                      "Sepal.Width")]
 
# cex is font size, pch is symbol
points(kmeans.recenters[, c("Sepal.Length",
                             "Sepal.Width")],
       col = 1:3, pch = 8, cex = 3)
 
# Visualizing clusters
y_kmeans <- kmeans.re$cluster
clusplot(iris_1[, c("Sepal.Length", "Sepal.Width")],
                      y_kmeans,
                      lines = 0,
                      shade = TRUE,
                      color = TRUE,
                      labels = 2,
                      plotchar = FALSE,
                      span = TRUE,
                      main = paste("Cluster iris"),
                      xlab = 'Sepal.Length',
                      ylab = 'Sepal.Width')
R

输出

  • 模型kmeans_re。

R编程中的监督和非监督学习

形成了3个聚类,其规模分别为50、62和38。在集群内,方差之和为88.4%。

  • 聚类识别。

R编程中的监督和非监督学习

该模型达到了100%的准确率,P值小于1,这表明该模型是好的。

  • 混淆矩阵。

R编程中的监督和非监督学习

因此,50个Setosa被正确归类为Setosa。在62个Versicolor中,48个Versicolor被正确归类为Versicolor,14个被归类为virginica。在36个Virginica中,19个Virginica被正确分类为Virginica,2个被分类为Versicolor。

  • 有3个聚类图的K-means:

R编程中的监督和非监督学习

该模型显示了3个具有三种不同颜色的聚类图,并带有Sepal.length和Sepal.width。

  • 绘制聚类中心。

R编程中的监督和非监督学习

在图中,聚类的中心用与聚类相同颜色的十字符号标记。

  • 绘制 聚类的图形。

R编程中的监督和非监督学习

因此,在不同的萼片长度和萼片宽度下形成了3个集群。

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程

登录

注册