数学建模~~描述性分析---RFM用户分层模型聚类

2024-08-24 02:20

本文主要是介绍数学建模~~描述性分析---RFM用户分层模型聚类,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

目录

1.RFM用户分层模型介绍

2.获取数据,标准化处理

2.1获取数据

2.2时间类型转换

2.3计算时间间隔

3.对于R,F,M的描述性分析

3.1代码分析

3.2分析结果说明

3.3对于F的描述性分析

3.4对于M的描述性分析

4.数据分箱--等级划分

4.1分箱概念

4.3分箱特点

4.3分箱方式

4.4总结分析

5.综合评价

6.K中心聚类分析

1.1数据的标准化处理

1.2标准化处理的结果

1.3K均值聚类分析

1.4分析结果说明


1.RFM用户分层模型介绍

简单讲就是:recency:最近一次消费的时间间隔

                     frequency消费的频率

                     money消费的花钱多少

这个我们会根据一个电商的表单数据,进行这个RFM分别的描述性分析,我们可以知道这个:

R越大,就是这个最近一次消费到截止时间的间隔很大,说明这个用户活跃度越高;

F越大,说明这个用户消费次数很多,也可以去证明这个用户的活跃度很高;

M越大,说明这个用户每一次消费的钱很多,进而可以去说明这个用户的这个活跃度很高;

上面这个是对于这个模型的基本的认识,我们根据这三个指标的活跃与否,每一个指标都是有两个情况,那么三个指标通过排列组合就会有8个可能的情况,这个RFM模型就是把这个所有的用户划分为8种类型(不理解的可以使用树状图画出来);

2.获取数据,标准化处理

2.1获取数据

我们首先对于这个电商的数据进行筛选出来我们想要的,

就是这个截止时间里面最近购买的时间间隔,这个表单里面使用的last_order_date进行表示的;

购买的频率就是我们这个地方的order_count就是订单的数量;

购买的金额就是这个地方的total_amount,我们的标准化处理就是基于这个表格里面的这三列的数据

2.2时间类型转换

==标准化处理==就是把这个表单里面的数据处理为我们容易使用python进行分析的,这个处理过程分为两个步骤:

第一个就是对于这个==时间类型==的转换,把这个字符串类型的数据转换为时间类型的数据,这个过程会使用到的函数就是to_datetime函数,这个函数的参数就是需要进行转换的这一列或者是这一行的数据;

# 导入pandas模块,简写为pdimport pandas as pd# 读取文件,赋值给dfdf = pd.read_csv("/Users/user_info/user_info.csv")# 将"last_order_date"这一列,转为时间类型df["last_order_date"] = pd.to_datetime(df["last_order_date"])# 输出dfprint(df)

2.3计算时间间隔

###对于这个时间价格的计算,我们的这个电商订单里面显示的是这个产品的下单时间,我们需要引进来一个参照的时间进行做减法,求出来这个时间的间隔;

###这个需要导入一个datetime模块;

###我们使用的就是这个datetime函数创建一个参照的时间,进行一个初始时间的设置,后续的这个时间间隔都是根据这个进行计算的;

###中间的时间间隔就是做减法,dt表示把这个时间间隔转换成为一个时间对象,方便我们进行后续的操作,days获得天数的信息,这个时候我们得到的就是一个整形的数据;

# 导入pandas模块
import pandas as pd '''读取并处理数据集'''
# 读取文件
df = pd.read_csv("/Users/user_info/user_info.csv")
# 数据类型转换
df["last_order_date"] = pd.to_datetime(df["last_order_date"])'''获取描绘R、F、M的数据'''
# 1. 获取描绘R的数据
# 导入datetime模块中的datetime
from datetime import datetime# 使用datetime()函数,构建2019年4月1日的时间,赋值给endTime
endTime = datetime(2019,4,1)# 计算endTime和"last_order_date"这一列的时间间隔
# 将结果添加为df的"time_gap"列
df["time_gap"] = endTime - df["last_order_date"]# 通过.dt.days,将"time_gap"列的天数提取出来
df["time_gap"] = df["time_gap"].dt.days# 输出df["time_gap"]
print(df["time_gap"])

3.对于R,F,M的描述性分析

3.1代码分析

###首先就是对于R的描述性分析,groupby是对于这个处理后的数据进行分类,这个分类的依据就是这个函数的参数--也就是我们上面积算出来的时间间隔;

###因为我们的这个结果、一个总人数,我们想要得到的就是不同区间的人数的占比情况;

###代码里面还是对于这个编码进行设置,调用了可视化函数进行绘图,绘图函数的横纵坐标就是这个时间间隔比例的索引和对应的数值;

# 导入pandas模块
import pandas as pd '''获取描绘R、F、M的数据'''
# 1.1 读取并处理数据集
# 读取文件
df = pd.read_csv("/Users/user_info/user_info.csv")
# 数据类型转换
df["last_order_date"] = pd.to_datetime(df["last_order_date"])# 1.2 获取描绘R的数据
# 导入datetime模块中的datetime
from datetime import datetime# 使用datetime()函数,构建2019年4月1日的时间,赋值给endTime
endTime = datetime(2019,4,1)# 计算endTime和"last_order_date"这一列的时间间隔
df["time_gap"] = endTime - df["last_order_date"]# 通过.dt.days,将"time_gap"列的天数提取出来
df["time_gap"] = df["time_gap"].dt.days'''对R、F、M进行描述性分析'''
# 2.1 对R进行描述性分析
# 根据time_gap分组聚合,赋值给R
R = df["time_gap"].groupby(df["time_gap"]).count()# 计算各部分人数,对应的比例
R_percent = R / 51394# 导入matplotlib.pyplot模块,简写为plt
import matplotlib.pyplot as plt# 通过给 plt.rcParams["font.sans-serif"] 赋值
# 将字体设置为 Arial Unicode MS 
plt.rcParams["font.sans-serif"] = "Arial Unicode MS"# 使用plt.bar()函数
# 以R_percent的index为x轴的值,R_percent的values为y轴的值
plt.bar(R_percent.index, R_percent.values)# 展示图像
plt.show()

3.2分析结果说明

这个横轴表示的就是这个最近一次购买时间到这个参照时间的时间差值,我们可以看到这个函数的图形是一个下降的趋势,刚开始很快,后来变得很慢;

3.3对于F的描述性分析

这个和上面的完全一样,就是把这个对应的参数换成了订单的数量count;l

# 导入pandas模块
import pandas as pd '''获取描绘R、F、M的数据'''
# 1.1 读取并处理数据集
# 读取文件
df = pd.read_csv("/Users/user_info/user_info.csv")
# 数据类型转换
df["last_order_date"] = pd.to_datetime(df["last_order_date"])# 1.2 获取描绘R的数据
# 导入datetime模块中的datetime
from datetime import datetime# 使用datetime()函数,构建2019年4月1日的时间,赋值给endTime
endTime = datetime(2019,4,1)# 计算endTime和"last_order_date"这一列的时间间隔
df["time_gap"] = endTime - df["last_order_date"]# 通过.dt.days,将"time_gap"列的天数提取出来
df["time_gap"] = df["time_gap"].dt.days'''对R、F、M进行描述性分析'''
# 2.2 对F进行描述性分析
# TODO 根据order_count分组聚合,赋值给F
F = df["order_count"].groupby(df["order_count"]).count()# TODO 计算各部分人数,对应的比例,赋值给F_percent
F_percent=F/51394# 导入matplotlib.pyplot模块,简写为plt
import matplotlib.pyplot as plt# 通过给 plt.rcParams["font.sans-serif"] 赋值
# 将字体设置为 Arial Unicode MS 
plt.rcParams["font.sans-serif"] = "Arial Unicode MS"# TODO 使用plt.bar()函数
# 以F_percent的index为x轴的值,F_percent的values为y轴的值
plt.bar(F_percent.index, F_percent.values)# 展示图像
plt.show()

这个我们就可以看出来,count越大,这个对应的人数越少,这个存在一个长尾的现象,因为大部分的人的购买次数都很少;

3.4对于M的描述性分析

如果这个M我们依然使用上面的方法去进行分析,这个时候绘图的效果就不是很好,如下所示:

###因此这个我们调整绘图策略,把这个结果绘制成为直方图:

###直方图的绘制使用的就是hist函数,这个bins参数表示的就是这个对应的横轴上面的标度情况

# 导入pandas模块
import pandas as pd '''获取描绘R、F、M的数据'''
# 1.1 读取并处理数据集
# 读取文件
df = pd.read_csv("/Users/user_info/user_info.csv")
# 数据类型转换
df["last_order_date"] = pd.to_datetime(df["last_order_date"])# 1.2 获取描绘R的数据
from datetime import datetime# 使用datetime()函数,构建2019年4月1日的时间,赋值给endTime
endTime = datetime(2019,4,1)# 计算endTime和"last_order_date"这一列的时间间隔
df["time_gap"] = endTime - df["last_order_date"]# 通过.dt.days,将"time_gap"列的天数提取出来
df["time_gap"] = df["time_gap"].dt.days'''对R、F、M进行描述性分析'''
# 2.3 对M进行描述性分析
# 导入matplotlib.pyplot模块,简写为plt
import matplotlib.pyplot as plt# 通过给 plt.rcParams["font.sans-serif"] 赋值
# 将字体设置为 Arial Unicode MS 
plt.rcParams["font.sans-serif"] = "Arial Unicode MS"# TODO 使用plt.hist()函数
# 将df["total_amount"]这一列数据传入,并传入参数bins =100
plt.hist(df["total_amount"], bins =100)# 用show()函数展示图像
plt.show()

可以看出来这个消费的总金额越少,人数就会越多,金额越多,对应的消费人数就会越少;

4.数据分箱--等级划分

4.1分箱概念

4.3分箱特点

###相同的数值一定会在一个箱子里面;

###区间的特点是左开右闭的情况;

###相邻两个箱子的临界值是一样的(类似于这个数学上面分段函数的衔接点)

4.3分箱方式

按照数据进行分箱:例如这个分数90-100,80-90等等之类的----cut函数

###这个函数的参数有两个,第一个就是等待进行分箱的数据集,第二个就是分箱的边界数值,这个结果就是按照我们的参数把这个区间划分出来;

# 导入pandas模块
import pandas as pd '''获取描绘R、F、M的数据'''
# 1.1 读取并处理数据集
# 读取文件
df = pd.read_csv("/Users/user_info/user_info.csv")
# 数据类型转换
df["last_order_date"] = pd.to_datetime(df["last_order_date"])# 1.2 获取描绘R的数据
# 导入datetime模块中的datetime
from datetime import datetime# 使用datetime()函数,构建2019年4月1日的时间,赋值给endTime
endTime = datetime(2019,4,1)# 计算endTime和"last_order_date"这一列的时间间隔
df["time_gap"] = endTime - df["last_order_date"]# 通过.dt.days,将"time_gap"列的天数提取出来
df["time_gap"] = df["time_gap"].dt.days'''依次划分R、F、M'''
# 1.1 划分R
# TODO 使用cut()函数,对"time_gap"进行数据分箱
# 以0,50,100,200,300,365为边界分为5组
# 将结果添加为df的"R"列
df["R"] = pd.cut(df["time_gap"], [0,50,100,200,300,365])# TODO 使用value_counts()函数
# 计算df["R"]每个区间的值,赋值给R_value
R_value = df["R"].value_counts()# 使用print输出R_value
print(R_value)

按照比例进行分箱:例如分数段里面的前10%,10%-20%之类的这样的分数段的划分---qcut函数

###这个函数的第二个参数是需要把这个数据集划分的区间的个数;

###我们也可以使用下面的labels参数进行这个区间的命名;

# 导入pandas模块
import pandas as pd '''获取描绘R、F、M的数据'''
# 1.1 读取并处理数据集
# 读取文件
df = pd.read_csv("/Users/user_info/user_info.csv")
# 数据类型转换
df["last_order_date"] = pd.to_datetime(df["last_order_date"])# 1.2 获取描绘R的数据
# 导入datetime模块中的datetime
from datetime import datetime# 使用datetime()函数,构建2019年4月1日的时间,赋值给endTime
endTime = datetime(2019,4,1)# 计算endTime和"last_order_date"这一列的时间间隔
df["time_gap"] = endTime - df["last_order_date"]# 通过.dt.days,将"time_gap"列的天数提取出来
df["time_gap"] = df["time_gap"].dt.days'''依次划分R、F、M'''
# 使用qcut()函数,对"time_gap"进行数据分箱
# 均分为5组,将结果添加为df的"R"列
df["R"] = pd.qcut(df["time_gap"], q=5)# 使用print输出df["R"]
print(df["R"])

对于FM的划分:

# 导入pandas模块
import pandas as pd '''获取描绘R、F、M的数据'''
# 1. 读取并处理数据集
# 读取文件
df = pd.read_csv("/Users/user_info/user_info.csv")
# 数据类型转换
df["last_order_date"] = pd.to_datetime(df["last_order_date"])# 2. 获取描绘R的数据
# 导入datetime模块中的datetime
from datetime import datetime
# 使用datetime()函数,构建2019年4月1日的时间,赋值给endTime
endTime = datetime(2019,4,1)
# 计算endTime和"last_order_date"这一列的时间间隔
df["time_gap"] = endTime - df["last_order_date"]
# 通过.dt.days,将"time_gap"列的天数提取出来
df["time_gap"] = df["time_gap"].dt.days'''依次划分R、F、M'''
# 1. 划分R
# 使用qcut()函数,将"time_gap"的数据分箱
# 均分为5组,区间标记命名为5-1,赋值给df["R"]
df["R"] = pd.qcut(df["time_gap"],q=5,labels=[5,4,3,2,1])# 2. 划分F
# TODO 使用qcut()函数,将"order_count"的数据分箱
# 均分为5组,区间标记命名为1-5,赋值给df["F"]
df["F"] = pd.qcut(df["order_count"],q=5,labels=[1,2,3,4,5])# 输出此时的df["F"]
print(df["F"])

对于M的划分:

# 导入pandas模块
import pandas as pd '''获取描绘R、F、M的数据'''
# 1. 读取并处理数据集
# 读取文件
df = pd.read_csv("/Users/user_info/user_info.csv")
# 数据类型转换
df["last_order_date"] = pd.to_datetime(df["last_order_date"])# 2. 获取描绘R的数据
# 导入datetime模块中的datetime
from datetime import datetime
# 使用datetime()函数,构建2019年4月1日的时间,赋值给endTime
endTime = datetime(2019,4,1)
# 计算endTime和"last_order_date"这一列的时间间隔
df["time_gap"] = endTime - df["last_order_date"]
# 通过.dt.days,将"time_gap"列的天数提取出来
df["time_gap"] = df["time_gap"].dt.days'''依次划分R、F、M'''
# 1. 划分R
# 使用qcut()函数,将"time_gap"的数据分箱
# 均分为5组,区间标记命名为5-1,赋值给df["R"]
df["R"] = pd.qcut(df["time_gap"],q=5,labels=[5,4,3,2,1])# 2. 划分F
# 使用qcut()函数,将"order_count"的数据分箱
# 均分为5组,区间标记命名为1-5,赋值给df["F"]
df["F"] = pd.qcut(df["order_count"],q=5,labels=[1,2,3,4,5])# 3. 划分M
# 使用qcut()函数,将"total_amount"的数据分箱
# 均分为5组,赋值给df["M"]
df["M"] = pd.qcut(df["total_amount"],q=5)# 使用value_counts()函数
# 计算df["M"]每个区间的值,赋值给M_value
M_value = df["M"].value_counts()# 计算各部分人数,对应的比例,赋值给M_percent
M_percent = M_value / 51394# 输出M_value
print(M_value)# 输出M_percent
print(M_percent)

4.4总结分析

为什么这个地方进行分箱的时候,这个第一个R是label=54321,后面的两个的labels是12345,这个和我们的相关性有关,R是越小越好,FM都是越大越好,因此这个参数是不一样的,我们在最开始的时候就说明了这个问题;

5.综合评价

###这个地方的划分都是0、1划分,因此我们定一个函数,然后把这个函数的划分方式全部应用于这三个分箱结果上面;

# 导入pandas模块
import pandas as pd '''获取描绘R、F、M的数据'''
# 1. 读取并处理数据集
# 读取文件
df = pd.read_csv("/Users/user_info/user_info.csv")
# 数据类型转换
df["last_order_date"] = pd.to_datetime(df["last_order_date"])# 2. 获取描绘R的数据
# 导入datetime模块中的datetime
from datetime import datetime
# 使用datetime()函数,构建2019年4月1日的时间,赋值给endTime
endTime = datetime(2019,4,1)
# 计算endTime和"last_order_date"这一列的时间间隔
df["time_gap"] = endTime - df["last_order_date"]
# 通过.dt.days,将"time_gap"列的天数提取出来
df["time_gap"] = df["time_gap"].dt.days'''依次划分R、F、M'''
# 1. 划分R
# 使用qcut()函数,将"time_gap"的数据分箱
# 均分为5组,区间标记命名为5-1,赋值给df["R"]
df["R"] = pd.qcut(df["time_gap"],q=5,labels=[5,4,3,2,1])# 2. 划分F
# 使用qcut()函数,将"order_count"的数据分箱
# 均分为5组,区间标记命名为1-5,赋值给df["F"]
df["F"] = pd.qcut(df["order_count"],q=5,labels=[1,2,3,4,5])# 3. 划分M
# 使用qcut()函数,将"total_amount"的数据分箱
# 均分为5组,区间标记命名为1-5分,赋值给df["M"]
df["M"] = pd.qcut(df["total_amount"],q=5,labels=[1,2,3,4,5])'''对用户标记分层结果'''
# 1. 简化分值
# 定义一个函数rfmTrans,如果参数x>3,就返回1;否则,就返回0
def rfmTrans(x):if x>3:return 1else:return 0# 对R、F、M这三列数据,分别使用apply()函数
# 将函数名rfmTrans作为参数传入,并分别重新赋值给R、F、M这三列
df["R"] = df["R"].apply(rfmTrans)
df["F"] = df["F"].apply(rfmTrans)
df["M"] = df["M"].apply(rfmTrans)# 使用print输出R、F、M这三列
print(df[["R","F","M"]])

接下俩的这个操作就是对于这个RFM各自的结果进行组合astype加起来,类似于这个二进制位一样的组合,然后把这个对应的评价用户评价类型进行匹配;

# 导入pandas模块
import pandas as pd '''获取描绘R、F、M的数据'''
# 1. 读取并处理数据集
# 读取文件
df = pd.read_csv("/Users/user_info/user_info.csv")
# 数据类型转换
df["last_order_date"] = pd.to_datetime(df["last_order_date"])# 2. 获取描绘R的数据
# 导入datetime模块中的datetime
from datetime import datetime
# 使用datetime()函数,构建2019年4月1日的时间,赋值给endTime
endTime = datetime(2019,4,1)
# 计算endTime和"last_order_date"这一列的时间间隔
df["time_gap"] = endTime - df["last_order_date"]
# 通过.dt.days,将"time_gap"列的天数提取出来
df["time_gap"] = df["time_gap"].dt.days'''依次划分R、F、M'''
# 1. 划分R
# 使用qcut()函数,将"time_gap"的数据分箱
# 均分为5组,区间标记命名为5-1,赋值给df["R"]
df["R"] = pd.qcut(df["time_gap"],q=5,labels=[5,4,3,2,1])# 2. 划分F
# 使用qcut()函数,将"order_count"的数据分箱
# 均分为5组,区间标记命名为1-5,赋值给df["F"]
df["F"] = pd.qcut(df["order_count"],q=5,labels=[1,2,3,4,5])# 3. 划分M
# 使用qcut()函数,将"total_amount"的数据分箱
# 均分为5组,区间标记命名为1-5分,赋值给df["M"]
df["M"] = pd.qcut(df["total_amount"],q=5,labels=[1,2,3,4,5])'''对用户标记分层结果'''
# 1. 简化分值
# 定义一个函数rfmTrans,如果参数x>3,就返回1;否则,就返回0
def rfmTrans(x):if x>3:return 1else:return 0# 对R、F、M这三列数据,分别使用apply()函数
# 将函数名rfmTrans作为参数传入,并分别重新赋值给R、F、M这三列
df["R"] = df["R"].apply(rfmTrans)
df["F"] = df["F"].apply(rfmTrans)
df["M"] = df["M"].apply(rfmTrans)# 2. 获取数值标签
# 用astype()函数将R、F、M这三列转化为字符串格式
# 再用"+"把字符串拼接在一起,组成一个新的列"mark"
df["mark"] = df["R"].astype(str)+df["F"].astype(str)+df["M"].astype(str)# 3. 标记用户层级
# 定义一个函数rfmType,将数据标签,转化为对应的用户分层
def rfmType(x):if x=="111":return "高价值用户"elif x=="101":return "重点发展用户"elif x=="011":return "重点唤回用户"elif x=="001":return "重点潜力用户"elif x=="110":return "一般潜力用户"elif x=="100":return "一般发展用户"elif x=="010":return "一般维系用户"else:return "低价值用户"# TODO 对"mark"列,使用apply()函数
# 将函数名rfmType作为参数传入,并将结果赋值给df["customer_type"]
df["customer_type"] = df["mark"].apply(rfmType)# 输出"customer_type"这一列
print(df["customer_type"])

6.K中心聚类分析

1.1数据的标准化处理

我们对于拿到的这个数据,可以看到一共是三类数据,一类是这个煤炭的消耗量,一类是这个电的消耗量,一类是这个单位工业增加值煤的消耗量,他们的数量级有很大的差异,不便于我们进行计算,我们首先使用描述性分析对于这个数据进行标准化处理;

我们勾选下面的这个把标准化另存为变量,这个就是我们的描述性分析想要达到的结果;

1.2标准化处理的结果

在原来的指标上面,标准化处理之后成为新的变量,方便我们后续的操作;

1.3K均值聚类分析

变量使用的就是我们标准化之后的变量,标注依据就是我们不同的地区,这个聚类数量可以从默认的2更改为3;

1.4分析结果说明

可以看到这个分析之后是被划分为三类,这个第一类就是三个指标都很低,第三类就是三个指标都很高,如何查看这个分类结果呢,在不关闭这个窗口的前提下,我们切换到原来的窗口,也就是数据窗口,就可以看到这个表格里多了一列QCL,这一类就是显示每一个城市对应的1,2,3类的结果

这篇关于数学建模~~描述性分析---RFM用户分层模型聚类的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1101179

相关文章

大模型研发全揭秘:客服工单数据标注的完整攻略

在人工智能(AI)领域,数据标注是模型训练过程中至关重要的一步。无论你是新手还是有经验的从业者,掌握数据标注的技术细节和常见问题的解决方案都能为你的AI项目增添不少价值。在电信运营商的客服系统中,工单数据是客户问题和解决方案的重要记录。通过对这些工单数据进行有效标注,不仅能够帮助提升客服自动化系统的智能化水平,还能优化客户服务流程,提高客户满意度。本文将详细介绍如何在电信运营商客服工单的背景下进行

性能分析之MySQL索引实战案例

文章目录 一、前言二、准备三、MySQL索引优化四、MySQL 索引知识回顾五、总结 一、前言 在上一讲性能工具之 JProfiler 简单登录案例分析实战中已经发现SQL没有建立索引问题,本文将一起从代码层去分析为什么没有建立索引? 开源ERP项目地址:https://gitee.com/jishenghua/JSH_ERP 二、准备 打开IDEA找到登录请求资源路径位置

Andrej Karpathy最新采访:认知核心模型10亿参数就够了,AI会打破教育不公的僵局

夕小瑶科技说 原创  作者 | 海野 AI圈子的红人,AI大神Andrej Karpathy,曾是OpenAI联合创始人之一,特斯拉AI总监。上一次的动态是官宣创办一家名为 Eureka Labs 的人工智能+教育公司 ,宣布将长期致力于AI原生教育。 近日,Andrej Karpathy接受了No Priors(投资博客)的采访,与硅谷知名投资人 Sara Guo 和 Elad G

Retrieval-based-Voice-Conversion-WebUI模型构建指南

一、模型介绍 Retrieval-based-Voice-Conversion-WebUI(简称 RVC)模型是一个基于 VITS(Variational Inference with adversarial learning for end-to-end Text-to-Speech)的简单易用的语音转换框架。 具有以下特点 简单易用:RVC 模型通过简单易用的网页界面,使得用户无需深入了

uva 10014 Simple calculations(数学推导)

直接按照题意来推导最后的结果就行了。 开始的时候只做到了第一个推导,第二次没有继续下去。 代码: #include<stdio.h>int main(){int T, n, i;double a, aa, sum, temp, ans;scanf("%d", &T);while(T--){scanf("%d", &n);scanf("%lf", &first);scanf

uva 10025 The ? 1 ? 2 ? ... ? n = k problem(数学)

题意是    ?  1  ?  2  ?  ...  ?  n = k 式子中给k,? 处可以填 + 也可以填 - ,问最小满足条件的n。 e.g k = 12  - 1 + 2 + 3 + 4 + 5 + 6 - 7 = 12 with n = 7。 先给证明,令 S(n) = 1 + 2 + 3 + 4 + 5 + .... + n 暴搜n,搜出当 S(n) >=

uva 11044 Searching for Nessy(小学数学)

题意是给出一个n*m的格子,求出里面有多少个不重合的九宫格。 (rows / 3) * (columns / 3) K.o 代码: #include <stdio.h>int main(){int ncase;scanf("%d", &ncase);while (ncase--){int rows, columns;scanf("%d%d", &rows, &col

透彻!驯服大型语言模型(LLMs)的五种方法,及具体方法选择思路

引言 随着时间的发展,大型语言模型不再停留在演示阶段而是逐步面向生产系统的应用,随着人们期望的不断增加,目标也发生了巨大的变化。在短短的几个月的时间里,人们对大模型的认识已经从对其zero-shot能力感到惊讶,转变为考虑改进模型质量、提高模型可用性。 「大语言模型(LLMs)其实就是利用高容量的模型架构(例如Transformer)对海量的、多种多样的数据分布进行建模得到,它包含了大量的先验

图神经网络模型介绍(1)

我们将图神经网络分为基于谱域的模型和基于空域的模型,并按照发展顺序详解每个类别中的重要模型。 1.1基于谱域的图神经网络         谱域上的图卷积在图学习迈向深度学习的发展历程中起到了关键的作用。本节主要介绍三个具有代表性的谱域图神经网络:谱图卷积网络、切比雪夫网络和图卷积网络。 (1)谱图卷积网络 卷积定理:函数卷积的傅里叶变换是函数傅里叶变换的乘积,即F{f*g}

秋招最新大模型算法面试,熬夜都要肝完它

💥大家在面试大模型LLM这个板块的时候,不知道面试完会不会复盘、总结,做笔记的习惯,这份大模型算法岗面试八股笔记也帮助不少人拿到过offer ✨对于面试大模型算法工程师会有一定的帮助,都附有完整答案,熬夜也要看完,祝大家一臂之力 这份《大模型算法工程师面试题》已经上传CSDN,还有完整版的大模型 AI 学习资料,朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费