逻辑回归特征选择

特征选择很重要,除了人工选择,还可以用
其他机器学习方法,如逻辑回归、随机森林、PCA、
LDA等。

分享一下逻辑回归做特征选择

特征选择包括:

特征升维

特征降维

特征升维

如一个样本有少量特征,可以升维,更好的拟合曲线

特征X

升维X/X**2/

效果验证,做回归

加特征x**2之后的效果

特征X1、X2

升维X1/X2/X1X2/X1**2/X2**2/

特征降维

利用L1正则化做特征选择

sparkmllib代码实现

import java.io.PrintWriter
import java.util

import org.apache.spark.ml.attribute.{Attribute, AttributeGroup, NumericAttribute}
import org.apache.spark.ml.classification.{BinaryLogisticRegressionTrainingSummary, LogisticRegressionModel, LogisticRegression}
import org.apache.spark.mllib.classification.LogisticRegressionWithSGD
import org.apache.spark.mllib.linalg.Vectors
import org.apache.spark.rdd.RDD
import org.apache.spark.sql.{SQLContext, DataFrame, Row}
import org.apache.spark.sql.types.{DataTypes, StructField}
import org.apache.spark.{SparkContext, SparkConf}

object LogisticRegression {
    def main(args: Array[String]) {
        val conf = new SparkConf().setAppName("test").setMaster("local")
        val sc = new SparkContext(conf)
        val sql  = new SQLContext(sc);
        val df: DataFrame = sql.read.format("libsvm").load("rl.txt")

//        val training = sc.read.format("libsvm").load("data/mllib/sample_libsvm_data.txt")

        val Array(train, test) = df.randomSplit(Array(0.7, 0.3),seed = 12L)
        val lr = new LogisticRegression()
                .setMaxIter(10)
                .setRegParam(0.3)
                .setElasticNetParam(1)//默认0 L2   1---》L1

        // Fit the model
        val lrModel: LogisticRegressionModel = lr.fit(train)

        lrModel.transform(test).show(false)
        // Print the coefficients and intercept for logistic regression
//        coefficients 系数  intercept 截距
        println(s"Coefficients: ${lrModel.coefficients} Intercept: ${lrModel.intercept}")

        lrModel.write.overwrite().save("F:\\mode")

        val weights: Array[Double] = lrModel.weights.toArray

        val pw = new PrintWriter("F:\\weights");
        //遍历
        for(i<- 0 until weights.length){
            //通过map得到每个下标相应的特征名

            //特征名对应相应的权重
            val str = weights(i)
            pw.write(str.toString)
            pw.println()
        }
        pw.flush()
        pw.close()

    }
}

  样本lr.txt

0 1:5.1 2:3.5 3:1.4 4:0.2
0 1:4.9 2:3.0 3:1.4 4:0.2
0 1:4.7 2:3.2 3:1.3 4:0.2
0 1:4.6 2:3.1 3:1.5 4:0.2
0 1:5.0 2:3.6 3:1.4 4:0.2
0 1:5.4 2:3.9 3:1.7 4:0.4
0 1:4.6 2:3.4 3:1.4 4:0.3
0 1:5.0 2:3.4 3:1.5 4:0.2
0 1:4.4 2:2.9 3:1.4 4:0.2
0 1:4.9 2:3.1 3:1.5 4:0.1
0 1:5.4 2:3.7 3:1.5 4:0.2
0 1:4.8 2:3.4 3:1.6 4:0.2
0 1:4.8 2:3.0 3:1.4 4:0.1
0 1:4.3 2:3.0 3:1.1 4:0.1
0 1:5.8 2:4.0 3:1.2 4:0.2
0 1:5.7 2:4.4 3:1.5 4:0.4
0 1:5.4 2:3.9 3:1.3 4:0.4
0 1:5.1 2:3.5 3:1.4 4:0.3
0 1:5.7 2:3.8 3:1.7 4:0.3
0 1:5.1 2:3.8 3:1.5 4:0.3
0 1:5.4 2:3.4 3:1.7 4:0.2
0 1:5.1 2:3.7 3:1.5 4:0.4
0 1:4.6 2:3.6 3:1.0 4:0.2
0 1:5.1 2:3.3 3:1.7 4:0.5
0 1:4.8 2:3.4 3:1.9 4:0.2
0 1:5.0 2:3.0 3:1.6 4:0.2
0 1:5.0 2:3.4 3:1.6 4:0.4
0 1:5.2 2:3.5 3:1.5 4:0.2
0 1:5.2 2:3.4 3:1.4 4:0.2
0 1:4.7 2:3.2 3:1.6 4:0.2
0 1:4.8 2:3.1 3:1.6 4:0.2
0 1:5.4 2:3.4 3:1.5 4:0.4
0 1:5.2 2:4.1 3:1.5 4:0.1
0 1:5.5 2:4.2 3:1.4 4:0.2
0 1:4.9 2:3.1 3:1.5 4:0.1
0 1:5.0 2:3.2 3:1.2 4:0.2
0 1:5.5 2:3.5 3:1.3 4:0.2
0 1:4.9 2:3.1 3:1.5 4:0.1
0 1:4.4 2:3.0 3:1.3 4:0.2
0 1:5.1 2:3.4 3:1.5 4:0.2
0 1:5.0 2:3.5 3:1.3 4:0.3
0 1:4.5 2:2.3 3:1.3 4:0.3
0 1:4.4 2:3.2 3:1.3 4:0.2
0 1:5.0 2:3.5 3:1.6 4:0.6
0 1:5.1 2:3.8 3:1.9 4:0.4
0 1:4.8 2:3.0 3:1.4 4:0.3
0 1:5.1 2:3.8 3:1.6 4:0.2
0 1:4.6 2:3.2 3:1.4 4:0.2
0 1:5.3 2:3.7 3:1.5 4:0.2
0 1:5.0 2:3.3 3:1.4 4:0.2
1 1:7.0 2:3.2 3:4.7 4:1.4
1 1:6.4 2:3.2 3:4.5 4:1.5
1 1:6.9 2:3.1 3:4.9 4:1.5
1 1:5.5 2:2.3 3:4.0 4:1.3
1 1:6.5 2:2.8 3:4.6 4:1.5
1 1:5.7 2:2.8 3:4.5 4:1.3
1 1:6.3 2:3.3 3:4.7 4:1.6
1 1:4.9 2:2.4 3:3.3 4:1.0
1 1:6.6 2:2.9 3:4.6 4:1.3
1 1:5.2 2:2.7 3:3.9 4:1.4
1 1:5.0 2:2.0 3:3.5 4:1.0
1 1:5.9 2:3.0 3:4.2 4:1.5
1 1:6.0 2:2.2 3:4.0 4:1.0
1 1:6.1 2:2.9 3:4.7 4:1.4
1 1:5.6 2:2.9 3:3.6 4:1.3
1 1:6.7 2:3.1 3:4.4 4:1.4
1 1:5.6 2:3.0 3:4.5 4:1.5
1 1:5.8 2:2.7 3:4.1 4:1.0
1 1:6.2 2:2.2 3:4.5 4:1.5
1 1:5.6 2:2.5 3:3.9 4:1.1
1 1:5.9 2:3.2 3:4.8 4:1.8
1 1:6.1 2:2.8 3:4.0 4:1.3
1 1:6.3 2:2.5 3:4.9 4:1.5
1 1:6.1 2:2.8 3:4.7 4:1.2
1 1:6.4 2:2.9 3:4.3 4:1.3
1 1:6.6 2:3.0 3:4.4 4:1.4
1 1:6.8 2:2.8 3:4.8 4:1.4
1 1:6.7 2:3.0 3:5.0 4:1.7
1 1:6.0 2:2.9 3:4.5 4:1.5
1 1:5.7 2:2.6 3:3.5 4:1.0
1 1:5.5 2:2.4 3:3.8 4:1.1
1 1:5.5 2:2.4 3:3.7 4:1.0
1 1:5.8 2:2.7 3:3.9 4:1.2
1 1:6.0 2:2.7 3:5.1 4:1.6
1 1:5.4 2:3.0 3:4.5 4:1.5
1 1:6.0 2:3.4 3:4.5 4:1.6
1 1:6.7 2:3.1 3:4.7 4:1.5
1 1:6.3 2:2.3 3:4.4 4:1.3
1 1:5.6 2:3.0 3:4.1 4:1.3
1 1:5.5 2:2.5 3:4.0 4:1.3
1 1:5.5 2:2.6 3:4.4 4:1.2
1 1:6.1 2:3.0 3:4.6 4:1.4
1 1:5.8 2:2.6 3:4.0 4:1.2
1 1:5.0 2:2.3 3:3.3 4:1.0
1 1:5.6 2:2.7 3:4.2 4:1.3
1 1:5.7 2:3.0 3:4.2 4:1.2
1 1:5.7 2:2.9 3:4.2 4:1.3
1 1:6.2 2:2.9 3:4.3 4:1.3
1 1:5.1 2:2.5 3:3.0 4:1.1
1 1:5.7 2:2.8 3:4.1 4:1.3

  特征选择

第一个特征权重为0,可以忽略,选择2,3,4个特征

时间: 2024-11-06 06:42:55

逻辑回归特征选择的相关文章

线性回归,逻辑回归的学习(包含最小二乘法及极大似然函数等)

博文参考了以下两位博主的文章:http://blog.csdn.net/lu597203933/article/details/45032607,http://blog.csdn.net/viewcode/article/details/8794401 回归问题的前提: 1) 收集的数据 2) 假设的模型,即一个函数,这个函数里含有未知的参数,通过学习,可以估计出参数.然后利用这个模型去预测/分类新的数据. 1. 线性回归 假设 特征 和 结果 都满足线性.即不大于一次方.这个是针对 收集的数据

逻辑回归(LR)总结复习

摘要: 1.算法概述 2.算法推导 3.算法特性及优缺点 4.注意事项 5.实现和具体例子 6.适用场合 内容: 1.算法概述 最基本的LR分类器适合于对两分类(类0,类1)目标进行分类:这个模型以样本特征的线性组合sigma(theta * Xi)作为自变量,使用logistic函数将自变量映射到(0,1)上. 其中logistic函数(sigmoid函数为): 函数图形为: 从而得到LR的模型函数为:,其中待定. 2.算法推导 建立的似然函数: 对上述函数求对数: 做下函数变换: 通过梯度下

对线性回归、逻辑回归、各种回归的概念学习

http://blog.csdn.net/viewcode/article/details/8794401 回归问题的条件/前提: 1) 收集的数据 2) 假设的模型,即一个函数,这个函数里含有未知的参数,通过学习,可以估计出参数.然后利用这个模型去预测/分类新的数据. 1. 线性回归 假设 特征 和 结果 都满足线性.即不大于一次方.这个是针对 收集的数据而言.收集的数据中,每一个分量,就可以看做一个特征数据.每个特征至少对应一个未知的参数.这样就形成了一个线性模型函数,向量表示形式: 这个就

逻辑回归的相关问题及java实现

本讲主要说下逻辑回归的相关问题和详细的实现方法 1. 什么是逻辑回归 逻辑回归是线性回归的一种,那么什么是回归,什么是线性回归 回归指的是公式已知,对公式中的未知參数进行预计,注意公式必须是已知的,否则是没有办法进行回归的 线性回归指的是回归中的公式是一次的,比如z=ax+by 逻辑回归事实上就是在线性回归的基础上套了一个sigmoid函数,详细的样子例如以下 2. 正则化项 引入正则化项的目的是防止模型过拟合,函数对样本的拟合有三种结果 欠拟合:直观的理解就是在训练集上的误差比較大,拟合出来的

Sklearn实现逻辑回归

方法与参数 LogisticRegression类的各项参数的含义 class sklearn.linear_model.LogisticRegression(penalty='l2', dual=False, tol=0.0001, C=1.0, fit_intercept=True, intercept_scaling=1, class_weight=None, random_state=None, solver='liblinear', max_iter=100, multi_class=

Python逻辑回归原理及实际案例应用

前言 上面我们介绍了线性回归, 岭回归, Lasso回归, 今天我们来看看另外一种模型-"逻辑回归". 虽然它有"回归"一词, 但解决的却是分类问题 目录 1. 逻辑回归 2. 优缺点及优化问题 3. 实际案例应用 4. 总结 正文 在前面所介绍的线性回归, 岭回归和Lasso回归这三种回归模型中, 其输出变量均为连续型, 比如常见的线性回归模型为: 其写成矩阵形式为: 现在这里的输出为连续型变量, 但是实际中会有"输出为离散型变量"这样的需求,

scikit-learn 逻辑回归类库使用小结

之前在逻辑回归原理小结这篇文章中,对逻辑回归的原理做了小结.这里接着对scikit-learn中逻辑回归类库的我的使用经验做一个总结.重点讲述调参中要注意的事项. 一.概述 在scikit-learn中,与逻辑回归有关的主要是这3个类.LogisticRegression, LogisticRegressionCV 和logistic_regression_path.其中LogisticRegression和LogisticRegressionCV的主要区别是LogisticRegression

sklearn逻辑回归(Logistic Regression,LR)调参指南

python信用评分卡建模(附代码,博主录制) https://study.163.com/course/introduction.htm?courseId=1005214003&utm_campaign=commission&utm_source=cp-400000000398149&utm_medium=share sklearn逻辑回归官网调参指南 https://scikit-learn.org/stable/modules/generated/sklearn.linear

机器学习—逻辑回归理论简介

下面是转载的内容,主要是介绍逻辑回归的理论知识,先总结一下自己看完的心得 简单来说线性回归就是直接将特征值和其对应的概率进行相乘得到一个结果,逻辑回归则是这样的结果上加上一个逻辑函数 这里选用的就是Sigmoid函数,在坐标尺度很大的情况下类似于阶跃函数 在确认特征对应的权重值也就是回归系数的时候 最常用的方法是最大似然法,EM参数估计,这个是在一阶导数能够有解的前提下 如果一阶导数无法求得解析值,那么一般选取梯度上升法,通过有限次的迭代过程,结合代价函数更新回归系数至收敛 //////////