线性回归算法,是利用数理统计中回归分析,来规定两栽或个别种植以上变量间相互依赖的定量关系的一样种统计分析方法。

06:整数奇偶排序

  • 查看
  • 提交
  • 统计
  • 提问

说到底时间限制: 
1000ms

内存限制: 
65536kB

描述
加以10单整数的队,要求对那重排序。排序要求:

1.奇频以眼前,偶数在晚;

2.奇勤按部就班自十分到稍微排序;

3.偶往往如约自小到非常排序。

输入
输入一行,包含10单整数,彼此因一个空格分开,每个整数的限是过等于0,小于等于100。

输出
本要求排序后输出一行,包含排序后的10独整数,数及高频以内以一个空格分开。

样例输入
4 7 3 13 11 12 0 47 34 98

样例输出
47 13 11 7 3 0 4 12 34 98

来源
1873

 1 #include<iostream>
 2 #include<algorithm>
 3 #include<cstdio>
 4 #include<cstring>
 5 #include<cmath>
 6 using namespace std;
 7 int n,m;
 8 int a[10001];
 9 int comp1(const int &a,const int &b)
10 {
11     if(a%2==1)
12     return 1;
13     else 
14     return 0;
15 }
16 int comp2(const int &a,const int &b)
17 {
18     if(a%2==1)
19     {
20         if(a>b)
21         return 1;
22         else 
23         return 0;
24     }
25     else 
26     {
27         if(a<b&&a%2==0&&b%2==0)
28         return 1;
29         else 
30         return 0;
31     }
32 }
33 int comp3(const int &a,const int &b)
34 {
35     if(a%2==1)
36     return 1;
37     else 
38     return 0;
39 }
40 int main()
41 {
42     for(int i=1;i<=10;i++)
43     cin>>a[i];
44     sort(a+1,a+11,comp1);
45     sort(a+1,a+11,comp2);
46     for(int i=1;i<=10;i++)
47     cout<<a[i]<<" ";
48     return 0;
49 }

 

1. 梯度下降法

线性回归好用最小二就法,但是速度比缓慢,因此一般以梯度下降法(Gradient
Descent),梯度下降法以分为批量梯度下降法(Batch Gradient
Descent)和任意梯度下降法(Stochastic Gradient
Descent)。批量梯度下降法每次迭代需要采用训练集里面的有着数据,当教练集数据量较充分时,速度就十分缓慢;随机梯度下降法每次迭代单独需要一个样本的数据,速度比较快,对于大数据集,可能只有需要使用少部分数码就上没有值,虽然发或当最为小价周围震荡,但是大部分景象下力量是,所以,一般以随机梯度下降法。

2. Mllib底线性回归

Mllib的线性回归下的凡任意梯度下降法。直接上代码:

import org.apache.log4j.{ Level, Logger }
import org.apache.spark.{ SparkConf, SparkContext }
import org.apache.spark.mllib.regression.LinearRegressionWithSGD
import org.apache.spark.mllib.regression.LabeledPoint
import org.apache.spark.mllib.linalg.Vectors

object LinearRegression {

  def main(args: Array[String]) {
    // 设置运行环境
    val conf = new SparkConf().setAppName("Linear Regression Test").setMaster("spark://master:7077").setJars(Seq("E:\\Intellij\\Projects\\MachineLearning\\MachineLearning.jar"))
    val sc = new SparkContext(conf)
    Logger.getRootLogger.setLevel(Level.WARN)

    //读取样本数据,生成RDD
    val data_path = "hdfs://master:9000/ml/data/lpsa.data"
    val dataRDD = sc.textFile(data_path)
    val examples = dataRDD.map { line =>
      val parts = line.split(',')
      LabeledPoint(parts(0).toDouble, Vectors.dense(parts(1).split(' ').map(_.toDouble)))
    }.cache()// 迭代次数
    val numIterations = 100
    // 步长
    val stepSize = 0.5
    // 选取样本的比例
    val miniBatchFraction = 1.0
    // 用随机梯度下降模型训练
    val sgdModel = LinearRegressionWithSGD.train(examples, numIterations, stepSize, miniBatchFraction)

    // 对样本进行测试
    val prediction = sgdModel.predict(examples.map(_.features))
    val predictionAndLabel = prediction.zip(examples.map(_.label))
    // 选取前100个样本
    val show_predict = predictionAndLabel.take(100)
    println("Prediction" + "\t" + "Label" + "\t" + "Diff")
    for (i <- 0 to show_predict.length - 1) {
      val diff = show_predict(i)._1-show_predict(i)._2
      println(show_predict(i)._1 + "\t" + show_predict(i)._2 + "\t" + diff)
    }

  }

}

有运行结果:

图片 1