机器学习之线性回归

机器学习简介

机器学习的场景

(1)肯定性场景
(2)不肯定性场景
如今大多数的公司中主要是应用机器学习技术来解决不肯定场景的问题。例如,咱们小组如今用机器学习对公司各个产品的用户进行优质客户分群,对每一个产品的用户群作用户流失分析。那么,机器学习会给这种不肯定性场景带来什么做用呢?主要是对这种不肯定场景提供判断和预测,拿回实际场景,对每一个用户进行判断是否会变成流失用户,预测这个用户将会在几天以后完全不上线。对于判断和预测这两个字的背后,咱们应该怎样去实现呢?在这里不提那些模型,算法,参数等理论,说的简单点,就是经过咱们准备好的DataSet中找规律。这种规律并非显视的,并非2,4,6,8这种简单的规律,咱们须要经过数据挖掘(是否是想到了蓝翔技校^_^)来挖掘出数据潜在的规律。算法

机器学习的模式:

按照计算场景来分(1) 离线批处理机器学习(2)实时处理机器学习
按照计算方式来分(1) 监督学习 (2)无监督学习 (3)半监督学习
离线批处理机器学习:
例如咱们如今作的用户流失模型,天天定时的去计算离线数据
实时处理机器学习:
例如实时推荐系统,一条一条的数据流进来进行计算。使用这种实时机器学习的,多数是电商,今日头条,百度搜索的这种业务场景apache

不管是监督学习和无监督学习仍是离线和实时,所用的算法都是同样的框架


今天分享给你们的是监督学习分类中的线性回归
其中关于算法的推导以及线性回归的概念请自行百度吧,我只把我去其糟粕的东西写下来分享给你们
先举一个经典的例子,房价预测
e.g.:
area price 单位:$1000
2019 $480
1046 $400
866 $246
1768 $445机器学习

以上的数据,咱们能够想象成是咱们从地产公司搜集来的数据,一个很是大的数据集(尽管我只给出了四条)函数

下面是设定的变量学习

m = training examples 训练样本
x = “input” variables / features 输入变量 —> 特征 —> 房子大小
y = “output” variable 目标变量 —> 房价ui

(x,y)— training example 一个训练样本lua

作监督学习的流程大概是下面这样的spa

Training Set   训练数据
                                   |
                      learning  algorithm  选择的算法
                                   |
              x(输入变量) ——>  hypothesis ——>  y (输出变量)
                         (使用算法假设的计算函数)

咱们设计学习算法,第一步咱们要考虑的是 怎么去表示假设(h),在这个课题,咱们要对假设进行线性表示
在对房价预测的时候,除了房屋面积的大小会影响,还有其余因素,例如 卧室的数量scala

咱们在预测的过程当中,为了使得预测的结果精准,咱们但愿 min =1/2 $ (h(x) - y)2的平方,也就是h(x)预测值和y实际结果的方差最小。
在这个计算的过程,咱们须要调整咱们的参数$,使得求得的平方差最小,而且这里乘以一个二分之一,为了方便咱们接下来的计算,须要找到能使平方差最小化的算法,梯度降低算法:若是你有不少的训练集合,可使用随机降低算法!大规模的数据集,随即降低一般会快得多。可是,随机降低算法不会精确到全局最小值。

上面我只写了一个计算任务的大致框架,细节部分留给有兴趣的人本身去补充,计算公式涉及的是线性代数,最小平方回归,最小二乘法之类的,也请拿起数学课本,去体验下那种折磨吧哈哈哈

推荐你们去看 吴恩达的课程,挺基础的,能够当作入门课程


我日常是使用spark Mlib开发的,因此下面给出一个spark官方的代码示例,理论和实践相结合
官方给出的是使用spark 1.x编写的,你们能够试一试用spark 2.x来写,spark 2.x对ML的支持度更好

import org.apache.spark.{SparkConf, SparkContext}
import org.apache.spark.mllib.linalg.Vectors
import org.apache.spark.mllib.regression.LabeledPoint
import org.apache.spark.mllib.regression.LinearRegressionModel
import org.apache.spark.mllib.regression.LinearRegressionWithSGD
// $example off$

@deprecated("Use ml.regression.LinearRegression or LBFGS", "2.0.0")
object LinearRegressionWithSGDExample {

  def main(args: Array[String]): Unit = {
    val conf = new SparkConf().setAppName("LinearRegressionWithSGDExample")
    val sc = new SparkContext(conf)

    // $example on$
    // Load and parse the data
    val data = sc.textFile("data/mllib/ridge-data/lpsa.data")
    val parsedData = data.map { line =>
      val parts = line.split(',')
      LabeledPoint(parts(0).toDouble, Vectors.dense(parts(1).split(' ').map(_.toDouble)))
    }.cache()

    // Building the model
    val numIterations = 100
    val stepSize = 0.00000001
    val model = LinearRegressionWithSGD.train(parsedData, numIterations, stepSize)

    // Evaluate model on training examples and compute training error
    val valuesAndPreds = parsedData.map { point =>
      val prediction = model.predict(point.features)
      (point.label, prediction)
    }
    val MSE = valuesAndPreds.map{ case(v, p) => math.pow((v - p), 2) }.mean()
    println("training Mean Squared Error = " + MSE)

    // Save and load model
    model.save(sc, "target/tmp/scalaLinearRegressionWithSGDModel")
    val sameModel = LinearRegressionModel.load(sc, "target/tmp/scalaLinearRegressionWithSGDModel")
    // $example off$
    sc.stop()
  }
}
相关文章
相关标签/搜索