在文章开始之前,推荐一篇值得阅读的好文章!感兴趣的也可以去看一下,并关注作者!
今日推荐:数学的算法代码如何实现:神奇的斐波那契数列(Fibonacci sequence)
文章链接:https://cloud.tencent.com/developer/article/2466042
通过这篇文章,可以帮助你深入的了解斐波那契数列起源于兔子数列,数学源于生活。斐波那契数列与黄金分割数有着千丝万缕的关系。算法难学的一个原因是算法本身具有一定的复杂性,需要持之以恒的学习和拓展自己的思维。
这部分我们可以使用Python脚本随机生成一个csv文件
import pandas as pd
import random
import string
# 随机生成数据的数量
num_records = 1000
# 随机生成用户ID
def generate_user_id():
return random.randint(1, 1000)
# 随机生成性别
def generate_gender():
return random.choice(['M', 'F'])
# 随机生成年龄(假设年龄范围在18到60之间)
def generate_age():
return random.randint(18, 60)
# 随机生成优惠券ID
def generate_coupon_id():
return ''.join(random.choices(string.digits, k=4))
# 随机生成优惠力度(假设优惠力度范围在5%到50%之间)
def generate_discount():
return f"{random.randint(5, 50)}%"
# 随机生成购买历史(假设每个用户的购买历史是一个整数,范围在1到20之间)
def generate_purchase_history():
return random.randint(1, 20)
# 随机生成优惠券是否被使用(1表示使用,0表示未使用)
def generate_coupon_used():
return random.choice([0, 1])
# 生成数据
data = []
for _ in range(num_records):
data.append([
generate_user_id(),
generate_age(),
generate_gender(),
generate_coupon_id(),
generate_discount(),
generate_purchase_history(),
generate_coupon_used()
])
# 创建DataFrame
columns = ['user_id', 'age', 'gender', 'coupon_id', 'discount', 'purchase_history', 'coupon_used']
df = pd.DataFrame(data, columns=columns)
# 保存为CSV文件
df.to_csv('o2o_data.csv', index=False)
print("CSV文件已生成:o2o_data.csv")
数据大概如下图
我们将用 pandas 处理这个数据集,生成特征,并进行标签编码
import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import LabelEncoder
# 加载数据
data = pd.read_csv('o2o_data.csv')
# 处理缺失值
data = data.dropna() # 丢弃含有缺失值的行
# 特征选择与标签编码
features = data[['age', 'gender', 'discount', 'purchase_history']] # 选择特征
labels = data['coupon_used'] # 目标变量
# 性别特征标签编码
le = LabelEncoder()
features['gender'] = le.fit_transform(features['gender'])
# 将折扣从百分比转化为数值
features['discount'] = features['discount'].apply(lambda x: float(x.strip('%')) / 100)
# 划分训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(features, labels, test_size=0.2, random_state=42)
决策树是一种基于树形结构的模型,通过一系列的决策规则来对数据进行分类。它从数据中提取特征信息,并基于这些特征做出决策。决策树的每个内部节点代表对某个特征的判断,每个分支代表判断结果,而每个叶子节点代表最终的类别。
接下来,我们使用决策树来进行分类。我们将用 DecisionTreeClassifier 来训练模型,并评估其性能。
from sklearn.tree import DecisionTreeClassifier
from sklearn.metrics import accuracy_score, classification_report, confusion_matrix
import matplotlib.pyplot as plt
from sklearn.tree import plot_tree
# 初始化决策树模型
dt_model = DecisionTreeClassifier(random_state=42)
# 训练模型
dt_model.fit(X_train, y_train)
# 预测结果
y_pred_dt = dt_model.predict(X_test)
# 评估模型性能
print("决策树模型准确率:", accuracy_score(y_test, y_pred_dt))
print("\n分类报告:\n", classification_report(y_test, y_pred_dt))
print("\n混淆矩阵:\n", confusion_matrix(y_test, y_pred_dt))
# 可视化决策树
plt.figure(figsize=(12,8))
plot_tree(dt_model, filled=True, feature_names=features.columns, class_names=['Not Used', 'Used'], rounded=True)
plt.show()
下图是输出的示例
可视化决策树
随机森林是由多棵决策树构成的集成学习方法,它通过构建多个决策树并将各树的结果进行投票(分类问题)或平均(回归问题)来增强模型的准确性。
然后,我们用随机森林来增强模型性能。我们将使用 RandomForestClassifier 进行训练。
from sklearn.ensemble import RandomForestClassifier
# 初始化随机森林模型
rf_model = RandomForestClassifier(n_estimators=100, random_state=42)
# 训练模型
rf_model.fit(X_train, y_train)
# 预测结果
y_pred_rf = rf_model.predict(X_test)
# 评估模型性能
print("随机森林模型准确率:", accuracy_score(y_test, y_pred_rf))
print("\n分类报告:\n", classification_report(y_test, y_pred_rf))
print("\n混淆矩阵:\n", confusion_matrix(y_test, y_pred_rf))
# 可视化特征重要性
feature_importances = rf_model.feature_importances_
plt.barh(features.columns, feature_importances)
plt.xlabel('Feature Importance')
plt.title('Random Forest Feature Importance')
plt.show()
模型 | 准确率 | 精确度(类别0) | 准确率(类别1) | 召回率(类别0) | 召回率(类别1) | F1分数(类别0) | F1分数(类别1) |
---|---|---|---|---|---|---|---|
决策树 | 0.475 | 0.50 | 0.45 | 0.48 | 0.47 | 0.49 | 0.46 |
随机森林 | 0.475 | 0.50 | 0.45 | 0.50 | 0.44 | 0.50 | 0.44 |
总结:
当然我们毕竟是虚假的数据,但是上面的建议还是可以参考一下的
决策树和随机森林是机器学习中非常强大的工具,它们不仅在分类任务中应用广泛,也在回归、预测等任务中大有作为。特别是在O2O优惠券使用预测中,利用这些模型可以为商家提供更精确的营销决策,从而提高消费者的转化率。刚兴趣的同学可以多使用几组数据集进行测试
挑战与创造都是很痛苦的,但是很充实。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。