逻辑回归模型_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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 谷歌地球怎么画路线图_消防路线图怎么画

    谷歌地球怎么画路线图_消防路线图怎么画1.首先需要将GPSDebug.log打开。打开方法 :点我传送。 2.使用NMEA2KMZ程序将LOG中的Nmealog开头的log转换成KMZ文件,会生成一个日期的文件。3.直接将生成的文件放到GoogleEarth中就行了。当两条路线对比的时候,还可以调整路线的颜色。注: KMZ文件是将GPS每秒位置点连成轨迹,比较精确的反映了测试轨迹。

    2022年9月19日
    3
  • 组合模式 Composite[通俗易懂]

    组合模式 Composite[通俗易懂]组合模式 Composite动机模式定义实例结构要点总结笔记动机在软件某些情况下,客户代码过多地依赖于对象容器复杂的内部实现结构,对象内部实现结构(而非抽象接口)地变化将引起客户代码地频繁变化.带来代码地维护性,扩展性等弊端如何将”客户代码与复杂地对象容器结构”解耦?让对象容器自己来实现自身地复杂结构,从而使得客户代码就像处理简单对象一样来处理复杂地对象容器模式定义将对象组合成树形结构以表示”整体-部分”地层次结构.Composite使得用户对单个对象和组合对象地使用具有一致性(稳定)实例树形

    2022年8月11日
    2
  • layui弹窗间的传值(layui弹出层传值)(窗口传值)[通俗易懂]

    layui弹窗间的传值(layui弹出层传值)(窗口传值)[通俗易懂]主要有两部分1、从主窗口传值到弹出层2、从弹出层传值到主窗口1、从主窗口传值到弹出层首先时jschangefileone函数时按钮绑定事件,按钮点击后调用这个函数然后弹出弹出层,加载changefile.html界面然后success提前加载changefile的form数据(从主窗口传值到弹出层)//bootstraptable的修改,点击按钮的时候自动选中该行,因此可以获取到整行…

    2022年6月12日
    140
  • 【Unity开发小技巧】打包IOS版本须知流程(移动)

    【Unity开发小技巧】打包IOS版本须知流程(移动)Unity是个开放性的平台,打包时也可以选择多种打包类型,几乎包含了所有的平台,目前主流Android,iOS平台,Android平台可以直接使用Unity自行打包,但iOS平台需要借助Mac电脑进行打包,本博客就iOS打包进行一个简单的说明,从开发到上线AppStore的所有流程。准备Mac电脑一台,苹果开发者账号一个一:unity打包Ios,Xcode工程打开Mac上的Unity,假设现在已经是开发完毕的状态,直接进行打包打开之后直接点File-BuildSettings然后将你的当..

    2022年6月27日
    114
  • 微信个人号机器人接口「建议收藏」

    微信个人号机器人接口「建议收藏」前段时间公司需求开发一套自定义的微信机器人,需求是可以自批量添加好友,自动聊天,自动回复,发朋友圈,转发语音,以及定时群发等,还可以提取聊天内容,进行数据汇总,what????微信还可以这样做!!调研开发了3个月,3个月啊!!!(主要被各种技术走偏路),终于成功了,都是走过的心酸泪,分享给大家,大家学习完,记得给我点个赞!!!大家一般需求点无非是以下几个需求:1.开发个人微信营销系统2.开发自定义的微信机器人,3.开发微信智能聊天客服系统4.定制行业内的群数据分析功能需求很

    2022年5月20日
    93
  • 安卓usb调试模式还是无法连接_android usb

    安卓usb调试模式还是无法连接_android usbAndroid系统的手机以及平板电脑占有巨大的市场份额,当使用USB数据线完成电脑端与安卓手机端数据传输时,需要将安卓手机开启USB调试模式。什么是USB调试?USB调试是一种模式,允许Android连接计算机以进行数据同步或刷新任何文件等。本教程详细介绍如何为各种品牌的Android设备和不同版本的Android操作系统启用USB调试。一如何在不同品牌的Android手机上启用USB调试由于A…

    2025年11月6日
    4

发表回复

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

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