<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[springtostring的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/springtostring</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; springtostring]]></copyright><item><title><![CDATA[一次失败的情感认识经历]]></title><link>https://blog.youkuaiyun.com/springtostring/article/details/160061776</link><guid>https://blog.youkuaiyun.com/springtostring/article/details/160061776</guid><author>springtostring</author><pubDate>Sat, 11 Apr 2026 23:43:36 +0800</pubDate><description><![CDATA[社招跳槽试用期跌宕起伏，我真不应该来这个部门。好不容易转正了，转正生效的最后一天是周五，我坐在工位提交完任务准备美美下班。突然收到微信消息，认识两个月的妹子要和我分手，瘫坐在工位。晚上睡不着觉，就睡了2个小时，7点看见窗外的阴雨和雾气，随即写了下面这首诗。恰逢阴雨偏多云，暗间单窗空对眠。此情若是诉衷时，如沐春风梦意恬。转眼虚度落寞痴，心猿白雪空茫然。希望我的春天暖阳会到来！]]></description><category></category></item><item><title><![CDATA[sklearn marco vs micro]]></title><link>https://blog.youkuaiyun.com/springtostring/article/details/121446309</link><guid>https://blog.youkuaiyun.com/springtostring/article/details/121446309</guid><author>springtostring</author><pubDate>Sat, 20 Nov 2021 21:51:14 +0800</pubDate><description><![CDATA[多类别任务的评估指标一般有的计算方式有mirco和marco之分，micro使用全体样本计算指标，marco使用各类别的指标均值。
以F1_score为例，
二分类的F1_score计算公式为：
F1=2×Precision×RecallPrecision+Recall
F1 = \frac{2 \times Precision \times Recall}{Precision + Recall}
F1=Precision+Recall2×Precision×Recall​
多分类F1_score分为：mi]]></description><category></category></item><item><title><![CDATA[lightgbm 自定义metric函数]]></title><link>https://blog.youkuaiyun.com/springtostring/article/details/121248004</link><guid>https://blog.youkuaiyun.com/springtostring/article/details/121248004</guid><author>springtostring</author><pubDate>Wed, 10 Nov 2021 14:37:14 +0800</pubDate><description><![CDATA[lgb 自定义函数
模板：
# f(preds: array, train_data: Dataset) -&gt; name: str, eval_result: float, is_higher_better: bool
def f(preds, train_data):
    '''
    :param preds:  array, 预测值
    :param train_data:  lgb Dataset, lgb的传入数据集
    :return:
    '''
    ###  返回]]></description><category></category></item><item><title><![CDATA[pandas dataframe 两列转字典]]></title><link>https://blog.youkuaiyun.com/springtostring/article/details/120978458</link><guid>https://blog.youkuaiyun.com/springtostring/article/details/120978458</guid><author>springtostring</author><pubDate>Tue, 26 Oct 2021 19:08:29 +0800</pubDate><description><![CDATA[在数据处理时，时常需要将数据表的两列转化为字典映射形式
df[[‘A’,‘B’]]  -----&gt;  dict(key:A, value:B)
方法一：使用zip
d = dict(zip(df['A'],df['B']))

import pandas as pd
import numpy as np

test_dict = {'id':[1,2,3,4,5,6],'name':['Alice','Bob','Cindy','Eric','Helen','Grace '],'gender':[0,]]></description><category></category></item><item><title><![CDATA[CTR 树模型-特征工程代码]]></title><link>https://blog.youkuaiyun.com/springtostring/article/details/120526193</link><guid>https://blog.youkuaiyun.com/springtostring/article/details/120526193</guid><author>springtostring</author><pubDate>Tue, 28 Sep 2021 11:45:29 +0800</pubDate><description><![CDATA[刚参加完一场CTR比赛，原本打算使用NN解决问题，后期发现树模型效果意外的好，学习了一些树模型处理CTR问题的特征工程代码。
曝光特征，交叉特征(count, nunique)
# 统计特征 count,nunqiue
def cnt_stat(df, group_cols, target_col=None, use_cnt=True, use_nunique=True):
    if isinstance(group_cols, list):
        col_name = '_'.join(gr]]></description><category></category></item><item><title><![CDATA[lightgbm 各任务基本代码]]></title><link>https://blog.youkuaiyun.com/springtostring/article/details/120518434</link><guid>https://blog.youkuaiyun.com/springtostring/article/details/120518434</guid><author>springtostring</author><pubDate>Mon, 27 Sep 2021 21:58:56 +0800</pubDate><description><![CDATA[lightgbm适用于多个任务(回归，二分类，多分类)，具体的参数需要做出变化，下面给出各任务的基本代码。
回归
import sklearn
from sklearn import datasets
from sklearn.model_selection import train_test_split
from sklearn.metrics import roc_auc_score,mean_squared_error
import numpy as np
import lightgbm as lgb]]></description><category></category></item><item><title><![CDATA[leetcode1081. 不同字符的最小子序列]]></title><link>https://blog.youkuaiyun.com/springtostring/article/details/119790538</link><guid>https://blog.youkuaiyun.com/springtostring/article/details/119790538</guid><author>springtostring</author><pubDate>Wed, 18 Aug 2021 22:30:48 +0800</pubDate><description><![CDATA[1081. 不同字符的最小子序列
返回 s 字典序最小的子序列，该子序列包含 s 的所有不同字符，且只包含一次。

示例 1：
输入：s = “bcabc”
输出：“abc”


示例 2：
输入：s = “cbacdcbc”
输出：“acdb”



1 &lt;= s.length &lt;= 1000


s 由小写英文字母组成


本题与316. 去除重复字母是一样的题目。如果没有接触过单调栈很难掌握本道题，看过一遍题解代码后，再做一次还是不会。如果只是知道最简单的单调栈，那么自己写这道题也会比较难]]></description><category></category></item><item><title><![CDATA[leetcode 丑数]]></title><link>https://blog.youkuaiyun.com/springtostring/article/details/118909154</link><guid>https://blog.youkuaiyun.com/springtostring/article/details/118909154</guid><author>springtostring</author><pubDate>Mon, 19 Jul 2021 18:35:27 +0800</pubDate><description><![CDATA[264. 丑数 II
给你一个整数 n ，请你找出并返回第 n 个 丑数 。
丑数 就是只包含质因数 2、3 和/或 5 的正整数。

示例 1：
输入：n = 10
输出：12
解释：[1, 2, 3, 4, 5, 6, 8, 9, 10, 12] 是由前 10 个丑数组成的序列。


示例 2：
输入：n = 1
输出：1
解释：1 通常被视为丑数。

首先肯定不能遍历各个整数，判断其是否只包含质因数 2、3 和 5，这样算法会超时。
方法一：优先队列+hash
使用优先队列记录模拟过程，每次将最小的数]]></description><category></category></item><item><title><![CDATA[算法导论 编辑距离]]></title><link>https://blog.youkuaiyun.com/springtostring/article/details/117430154</link><guid>https://blog.youkuaiyun.com/springtostring/article/details/117430154</guid><author>springtostring</author><pubDate>Sun, 18 Jul 2021 22:29:38 +0800</pubDate><description><![CDATA[编辑距离是动态规划算法学习的经典问题。
leetcode有一道面试常考的72. 编辑距离
算法导论上的编辑距离实验要比leetcode上的实验更加的难
算法导论书编辑距离习题：
为了将一个文本串x[1..m]x [ 1.. m ]x[1..m] 转换为目标串y[1..n]y [ 1.. n ]y[1..n]，我们可以使用多种变换操作。我们的目标是，给定xxx 和yyy ，求将xxx转换为yyy的一个变换操作序列。我们使用一个数组zzz 保存中间结果，假定它足够大，可存下中间结果的所有字符。初始时，zzz是空]]></description><category></category></item><item><title><![CDATA[numpy 强制类型转换问题]]></title><link>https://blog.youkuaiyun.com/springtostring/article/details/118185716</link><guid>https://blog.youkuaiyun.com/springtostring/article/details/118185716</guid><author>springtostring</author><pubDate>Thu, 24 Jun 2021 13:27:13 +0800</pubDate><description><![CDATA[今天用numpy遇到一个关于类型转换的问题，
import numpy as np
A = np.array([1,2,3,4,5,6,7,8,9])   
A[0]=3.2
print(A)
# [3 2 3 4 5 6 7 8 9]

可以发现A[0]=3.2,被强制转换成整型3了。发生的原因是A的类型是np.int，赋值浮点数，会自动转为整型。
这样的问题一旦出现很难发现，在写成程序时要提前想好要用的np类型。
补充，两个整型np.array做运算时，会根据运算自动转换类型。
A = np.array]]></description><category></category></item><item><title><![CDATA[leetcode 1872. 石子游戏VIII]]></title><link>https://blog.youkuaiyun.com/springtostring/article/details/117263159</link><guid>https://blog.youkuaiyun.com/springtostring/article/details/117263159</guid><author>springtostring</author><pubDate>Tue, 25 May 2021 19:49:18 +0800</pubDate><description><![CDATA[1872. 石子游戏 VIII

Alice 和 Bob 玩一个游戏，两人轮流操作， Alice 先手 。总共有 nnn 个石子排成一行。轮到某个玩家的回合时，如果石子的数目大于 1 ，他将执行以下操作：
选择一个整数$ x &gt; 1$ ，并且 移除 最左边的 xxx 个石子。将移除的石子价值之和累加到该玩家的分数中。将一个新的石子放在最左边，且新石子的值为被移除石子值之和。当只剩下一个 石子时，游戏结束。Alice 和 Bob 的 分数之差 为 (Alice 的分数 - Bob 的分数) 。 Alic]]></description><category></category></item><item><title><![CDATA[leetcode面试题 05.04 下一个数]]></title><link>https://blog.youkuaiyun.com/springtostring/article/details/116517448</link><guid>https://blog.youkuaiyun.com/springtostring/article/details/116517448</guid><author>springtostring</author><pubDate>Sat, 08 May 2021 09:28:30 +0800</pubDate><description><![CDATA[下一个数。给定一个正整数，找出与其二进制表达式中1的个数相同且大小最接近的那两个数（一个略大，一个略小）。
示例1:
 输入：num = 2（或者0b10）
 输出：[4, 1] 或者（[0b100, 0b1]）

示例2:
 输入：num = 1
 输出：[2, -1]

提示:

num的范围在[1, 2147483647]之间；
如果找不到前一个或者后一个满足条件的正数，那么输出 -1。

本题知识点在于位运算，熟悉位运算能较快解题。

如何取大一点的数：从右向左遍历num二进制表达式，将第一次出现 ]]></description><category></category></item><item><title><![CDATA[python 多进程中的变量问题.]]></title><link>https://blog.youkuaiyun.com/springtostring/article/details/116402922</link><guid>https://blog.youkuaiyun.com/springtostring/article/details/116402922</guid><author>springtostring</author><pubDate>Tue, 04 May 2021 17:39:03 +0800</pubDate><description><![CDATA[最近写python程序，发现python的for循环太慢了，希望能通过多进程加速，加快程序速度。
程序功能：期望把每一次循环的结果都保存在一个字典dict里，但是实际输出发现字典是空的，程序功能类似如下：
import torch
import torch.nn as nn
import time
import multiprocessing

MP = {}

def putone(x):
    a,b=x[0],x[1]
    b[a]=2*a
    MP[a] = 2*a



if __nam]]></description><category></category></item><item><title><![CDATA[leetcode403 青蛙过河]]></title><link>https://blog.youkuaiyun.com/springtostring/article/details/116310105</link><guid>https://blog.youkuaiyun.com/springtostring/article/details/116310105</guid><author>springtostring</author><pubDate>Fri, 30 Apr 2021 22:33:52 +0800</pubDate><description><![CDATA[403. 青蛙过河

一只青蛙想要过河。 假定河流被等分为若干个单元格，并且在每一个单元格内都有可能放有一块石子（也有可能没有）。 青蛙可以跳上石子，但是不可以跳入水中。给你石子的位置列表 stones（用单元格序号 升序 表示）， 请判定青蛙能否成功过河（即能否在最后一步跳至最后一块石子上）。
开始时， 青蛙默认已站在第一块石子上，并可以假定它第一步只能跳跃一个单位（即只能从单元格 1 跳至单元格 2 ）。如果青蛙上一步跳跃了 k 个单位，那么它接下来的跳跃距离只能选择为 k - 1、k 或 k + 1 ]]></description><category></category></item><item><title><![CDATA[PyTorch nn.MultiHead() 参数理解]]></title><link>https://blog.youkuaiyun.com/springtostring/article/details/113958933</link><guid>https://blog.youkuaiyun.com/springtostring/article/details/113958933</guid><author>springtostring</author><pubDate>Mon, 22 Feb 2021 22:21:56 +0800</pubDate><description><![CDATA[之前一直是自己实现MultiHead Self-Attention程序，代码段又臭又长。后来发现Pytorch 早已经有API nn.MultiHead()函数，但是使用时我却遇到了很大的麻烦。
首先放上官网说明：
MultiHead(Q,K,V)=Concat(head1,…,headh)WOwhere&nbsp;headi=Attention(QWiQ,KWiK,VWiV)
MultiHead(Q,K,V)=Concat(head_1,…,head_h)W_O\quad    where\    hea]]></description><category></category></item><item><title><![CDATA[leetcode410. 分割数组的最大值]]></title><link>https://blog.youkuaiyun.com/springtostring/article/details/113925988</link><guid>https://blog.youkuaiyun.com/springtostring/article/details/113925988</guid><author>springtostring</author><pubDate>Sun, 21 Feb 2021 23:15:52 +0800</pubDate><description><![CDATA[410. 分割数组的最大值
给定一个非负整数数组 nums和一个整数 m ，你需要将这个数组分成 m个非空的连续子数组。
设计一个算法使得这 m个子数组各自和的最大值最小。

示例 1：
输入：nums = [7,2,5,10,8], m = 2
输出：18
解释：
一共有四种方法将 nums 分割为 2 个子数组。 其中最好的方式是将其分为 [7,2,5] 和 [10,8] 。
因为此时这两个子数组各自的和的最大值为18，在所有情况中最小。
示例 2：
输入：nums = [1,2,3,4,5], m =]]></description><category></category></item><item><title><![CDATA[BPRMF算法(Pytorch实现)]]></title><link>https://blog.youkuaiyun.com/springtostring/article/details/113866662</link><guid>https://blog.youkuaiyun.com/springtostring/article/details/113866662</guid><author>springtostring</author><pubDate>Fri, 19 Feb 2021 16:14:26 +0800</pubDate><description><![CDATA[1. 写作目的
​	首先感叹一下推荐系统的子领域是这么的丰富，可以有召回阶段的传统推荐、精排阶段的CTR、序列化推荐、对话推荐、推荐系统与图神经网络结合、推荐系统与知识图谱结合、推荐系统与NAS技术结合。论文看得眼花缭乱，慕然回首，发现自己根本没入门。
​	BPR算法是基础的推荐算法，在我入门推荐系统时很容易理解BPR算法，但是当我想实现完整的推荐算法时，却困难重重，如何加载数据，如何进行负采样，如何写评价指标函数，让我很烦恼。
参照王翔老师的NGCF算法 Tensorflow版 和 PyTorch版 自己]]></description><category></category></item><item><title><![CDATA[leetcode 1760. 袋子里最少数目的球]]></title><link>https://blog.youkuaiyun.com/springtostring/article/details/113829567</link><guid>https://blog.youkuaiyun.com/springtostring/article/details/113829567</guid><author>springtostring</author><pubDate>Tue, 16 Feb 2021 23:28:05 +0800</pubDate><description><![CDATA[题目：
给你一个整数数组 nums ，其中 nums[i] 表示第 i 个袋子里球的数目。同时给你一个整数** maxOperations** 。你可以进行如下操作至多 maxOperations 次：
选择任意一个袋子，并将袋子里的球分到 2 个新的袋子中，每个袋子里都有正整数个球。
比方说，一个袋子里有5个球，你可以把它们分到两个新袋子里，分别有1个和 4 个球，或者分别有 2 个和 3 个球。
你的开销是单个袋子里球数目的最大值 ，你想要最小化开销。
请你返回进行上述操作后的最小开销。
示例：

输入]]></description><category></category></item><item><title><![CDATA[Amazon Review Dataset数据集介绍]]></title><link>https://blog.youkuaiyun.com/springtostring/article/details/113407712</link><guid>https://blog.youkuaiyun.com/springtostring/article/details/113407712</guid><author>springtostring</author><pubDate>Fri, 29 Jan 2021 22:25:05 +0800</pubDate><description><![CDATA[Amazon Review Dataset数据集记录了用户对亚马逊网站商品的评价，是推荐系统的经典数据集，并且Amazon一直在更新这个数据集，根据时间顺序，Amazon数据集可以分成三类：

2013 版 https://nijianmo.github.io/amazon/index.html
2014版 http://jmcauley.ucsd.edu/data/amazon/index_2014.html
2018版  http://snap.stanford.edu/data/web-Amazon-]]></description><category></category></item><item><title><![CDATA[推荐系统TOP-K指标AUC和CTR指标AUC的异同]]></title><link>https://blog.youkuaiyun.com/springtostring/article/details/113100524</link><guid>https://blog.youkuaiyun.com/springtostring/article/details/113100524</guid><author>springtostring</author><pubDate>Wed, 27 Jan 2021 23:30:35 +0800</pubDate><description><![CDATA[推荐系统可以分为两个阶段：

召回阶段，即TOP-K任务
精排阶段，即CTR任务
召回阶段是为每一个用户在成千上万的待选item中推荐排名前K个的候选item
精排阶段是对在召回阶段的K个的候选item的基础上，预测特定的user点击特定的item的概率，此结果对广告商精准投放广告产生直接影响，直接关系着广告的盈利。

我读了一些召回TOP-K的论文和CTR论文，发现TOP-K指标的AUC和CTR指标AUC稍有不同：

...]]></description><category></category></item></channel></rss>