逻辑回归模型_RF模型

逻辑回归模型_RF模型背景:在“批量导入数据到Redis”中已经介绍了将得到的itema item1:score1,item2:score2…批量导入到Redis数据库中。本文的工作是运用机器学习LR技术,抽取相应的特征,进行点击率的估计。点击率(Click-Through-Rate,CTR)预估点击率(predictCTR,pCTR)是指对某个系统将要在某个情形下展现前,系统预估其可能的点击概率…

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE稳定放心使用

背景:
“批量导入数据到Redis” 中已经介绍了将得到的itema item1:score1,item2:score2…批量导入到Redis数据库中。本文的工作是运用机器学习LR技术,抽取相应的特征,进行点击率的估计。

点击率(Click-Through-Rate, CTR) 预估点击率 (predict CTR, pCTR) 是指对某个系统将要在某个情形下展现前, 系统预估其可能的点击概率

步骤一:
学习、训练sklearn中自带的LR模型,参考这里

代码如下:(lr.py

import sys
import numpy as np

from sklearn import datasets
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LogisticRegression

def load_data():
       input_data = datasets.load_iris()
       x_train, x_test, y_train, y_test = train_test_split(input_data.data, input_data.target, test_size = 0.2, random_state = 0)
       return x_train, x_test, y_train, y_test


def main():
        print("---------")
        x_train, x_test, y_train, y_test = load_data()
        model = LogisticRegression()
        model.fit(x_train, y_train)

        print("w: ", model.coef_)
        print("b: ", model.intercept_)
        print("precision: ", model.score(x_test, y_test))
        print("MSE: ", np.mean((model.predict(x_test) - y_test) ** 2))

if __name__ == '__main__':
        main()

执行结果如图1所示:
在这里插入图片描述
上文用到的训练数据集也是sklearn中自带的iris数据集。
该数据集测量了所有150个样本的4个特征,分别是:

  • sepal length(花萼长度)
  • sepal width(花萼宽度)
  • petal length(花瓣长度)
  • petal width(花瓣宽度)

下图2为iris数据集部分数据示意图:
在这里插入图片描述
通过分析iris数据集可得,iris数据集中的特征矩阵为稠密矩阵,由此可见,如果想直接运用sklearn自带的LR算法进行模型训练,则首先要保证输入的数据集的特征为稠密矩阵的形式。不幸的是,现实中很多情况下的数据集的特征一般为稀疏矩阵形式,如下图3所示:(a8a)
在这里插入图片描述
说明: 上图3中数据集的第一列代表数据的分类标签,之后的为特征和对应的评分

步骤二:
将图3所示数据集转化为适合sklearn中LR输入的稠密矩阵形式
代码如下:(lr.py

import sys
import numpy as np

from scipy.sparse import csr_matrix
from sklearn import datasets
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LogisticRegression

#外部输入数据集
data_in = sys.argv[1]

#重写数据集加载函数
def load_data():
		#特征的行号
        fea_row_list = []
        #特征的列号
        fea_col_list = []
        #标签列表
        target_list = []
        #特征对应的评分
        data_list = []

		#行索引
        row_index = 0
        #最大的特征编号
        max_col = 0
		
		#一行行读数据并解析
        with open(data_in, 'r') as fd:
                for line in fd:
                        ss = line.strip().split(' ')
                        label = ss[0]
                        fea = ss[1:]

                        target_list.append(int(label))

                        for fea_score in fea:
                                sss = fea_score.strip().split(':')
                                if len(sss) != 2:
                                        continue
                                feature, score = sss

                                fea_row_list.append(row_index)
                                fea_col_list.append(int(feature))
                                data_list.append(float(score))

                                if int(feature) > max_col:
                                        max_col = int(feature)
                        row_index += 1

        row = np.array(fea_row_list)
        col = np.array(fea_col_list)
        data = np.array(data_list)

        fea_datasets = csr_matrix((data, (row, col)), shape=(row_index, max_col+1)).toarray()
        #当特征维度过大时,选下面这种方式(加toarray()和不加都是对的),内存不容易爆掉
        #fea_datasets = csr_matrix((data, (row, col)), shape=(row_index, max_col+1))
        
        x_train, x_test, y_train, y_test = train_test_split(fea_datasets, target_list, test_size = 0.2, random_state = 0)
        return x_train, x_test, y_train, y_test

#自带iris数据集加载函数
#def load_data():
#       input_data = datasets.load_iris()
#
#       x_train, x_test, y_train, y_test = train_test_split(input_data.data, input_data.target, test_size = 0.2, random_state = 0)
#
#       return x_train, x_test, y_train, y_test


def main():
        print("---------")
        x_train, x_test, y_train, y_test = load_data()

        model = LogisticRegression()
        model.fit(x_train, y_train)

        print("w: ", model.coef_)
        print("b: ", model.intercept_)
        print("precision: ", model.score(x_test, y_test))
        print("MSE: ", np.mean((model.predict(x_test) - y_test) ** 2))

if __name__ == '__main__':
        main()

上文代码将稀疏矩阵转换为稠密矩阵,满足了sklearn中LR模型数据集输入格式要求。代码运行结果如图4所示:
在这里插入图片描述

步骤一和步骤二完成了模型训练的代码部分,今天的文章先写到这里,下一篇中将讲到如何将文本数据数字化为本文图3的稀疏矩阵格式。
原始文本数据为:
用户ID / 物品ID / 收听时长 / 收听的时间点 / 性别 / 年龄段 / 收入 / 籍贯 / 物品名称 / 物品总时长 / 物品标签
在这里插入图片描述

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/182487.html原文链接:https://javaforall.net

(0)
上一篇 2022年10月13日 上午11:46
下一篇 2022年10月13日 上午11:46


相关推荐

  • UART串口通讯协议解析

    UART串口通讯协议解析UART 串口通讯协议解析概述接口通信协议概述通用异步收发传输器 UniversalAsy Transmitter 通常称作 UART 它将要传输的资料在串行通信与并行通信之间加以转换 作为把并行输入信号转成串行输出信号的芯片 UART 通常被集成于其他通讯接口的连结上 具体实物表现为独立的模块化芯片 或作为集成于微处理器中的周边设备 一般是 RS 232C 规格的 与类似 Maxim 的 MAX232 之类的标准信号幅度变换芯片进行搭配 作为连接外部设备的接口 在 UART 上追加

    2026年3月18日
    3
  • JS 面试题 大全

    JS 面试题 大全1、介绍一下js的数据类型有哪些,值是如何存储的?2、说一下js的数据类型的转换都有哪些?3、如何去判断js数据类型?4、介绍js有哪些内置对象?5、javascript创建对象的几种方式?6、js获取原型的方法?7、什么是闭包,为什么要用它?8、三种事件模型是什么?9、哪些操作会造成内存泄漏?10、简述javascript中this的指向?![在这里插入图片描述](https://img-blog.csdnimg.cn/2021032219142296.png

    2022年8月26日
    10
  • ideaIU-2021.5.3激活码【在线注册码/序列号/破解码】

    ideaIU-2021.5.3激活码【在线注册码/序列号/破解码】,https://javaforall.net/100143.html。详细ieda激活码不妨到全栈程序员必看教程网一起来了解一下吧!

    2022年3月19日
    42
  • HTML常用标签和属性大全

    HTML常用标签和属性大全nbsp 目录 html 标签 lt 字体效果 区断标记 连结格式 贴图 音乐 表格语法 分割视窗 表单 表示颜色的有三种方式 属性可分为三种 align 属性 列表 nbsp 1 无序列表又称符号列表 2 有序列表 3 定义列表 name 连接名称 target 目标窗口语法格式 图像 nbsp 语法格式 font 元素 表格语法格式 tr 元素

    2026年3月18日
    0
  • 【程序员转行】AI大模型训练师:低门槛拿高薪,风口赛道适配程序员&小白

    【程序员转行】AI大模型训练师:低门槛拿高薪,风口赛道适配程序员&小白

    2026年3月14日
    2
  • 一、智能车舵机控制

    一、智能车舵机控制前言:本文章主要是近期有关舵机知识的总结,将分别从舵机的控制原理,控制流程和代码实现流程几个方面作简要介绍,由于时间紧急,难免有疏漏错误之处,欢迎留言指正,QQ:2046890259一、多级的控制原理:我们本次智能车使用的舵机是通过PWM进行控制。而PWM几个重要的参数就是最大值,最小值和占空比。其中占空比决定了舵机的旋转角度,如下图所示:不同的占空比控制不同的角度。而我们的目的就是通过…

    2022年6月20日
    40

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号