python第20次作业(15周)-sklearn

本文通过生成数据集并使用10折交叉验证的方法,对比了高斯朴素贝叶斯、支持向量机及随机森林三种算法的性能。最终通过准确率、F1分数及AUCROC等指标评估得出,随机森林的表现最佳。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

题目:

这里写图片描述
这里写图片描述
该题目需要生成一个数据集,用三种不同的机器学习算法进行训练,由此来评估这三种算法的性能(根据给出的标准)。根据提示的步骤来一步步实现。

1.人工生成数据集

根据给出的参数提示,生成数据集。
参考:
http://scikit-learn.org/stable/modules/generated/sklearn.datasets.make_classification.html

# 1.Create a classification dataset (n_samples >= 1000, n_features >= 10)
dataset = datasets.make_classification(n_samples=1000, n_features=10)

PS:load数据集:
http://scikit-learn.org/stable/modules/generated/sklearn.datasets.load_iris.html

# load a default dataset
from sklearn import datasets
iris = datasets.load_iris()

2.利用10—fold cross validation划分数据集

参考:
http://scikit-learn.org/stable/modules/generated/sklearn.model_selection.KFold.html
这里写图片描述

# 2.Split the dataset using 10-fold cross validation 
kf = cross_validation.KFold(1000, n_folds=10, shuffle=True)
for train_index, test_index in kf:
    X_train, y_train = dataset[0][train_index], dataset[1][train_index]
    X_test, y_test = dataset[0][test_index], dataset[1][test_index]

3.利用三种方法训练

a.GaussianNB
PS:Naive Bayes:
这里写图片描述
参考:
http://scikit-learn.org/stable/modules/generated/sklearn.naive_bayes.GaussianNB.html

# 3.Train the algorithms and evaluate the cross-validated performance
# GaussianNB
GaussianNB_clf = GaussianNB() 
GaussianNB_clf.fit(X_train, y_train)
GaussianNB_pred = GaussianNB_clf.predict(X_test)

SVM:
这里写图片描述
参考:
http://scikit-learn.org/stable/modules/generated/sklearn.svm.SVC.html

# SVM  
SVC_clf = SVC(C=1e-01, kernel='rbf', gamma=0.1)
SVC_clf.fit(X_train, y_train)
SVC_pred = SVC_clf.predict(X_test)

Random Forest Classifier:
PS:Random Forest:
这里写图片描述
参考:
http://scikit-learn.org/stable/modules/generated/sklearn.ensemble.RandomForestClassifier.html

# Random Forest  
Random_Forest_clf = RandomForestClassifier(n_estimators=6)
Random_Forest_clf.fit(X_train, y_train)
Random_Forest_pred = Random_Forest_clf.predict(X_test)

4.性能评估:

这里写图片描述
Accuracy, F1-score, AUC ROC:
这里写图片描述
参考:
http://scikit-learn.org/stable/modules/generated/sklearn.metrics.accuracy_score.html
http://scikit-learn.org/stable/modules/generated/sklearn.metrics.f1_score.html
http://scikit-learn.org/stable/modules/generated/sklearn.metrics.auc.html

# 4.Evaluate the cross-validated performance
# GaussianNB
GaussianNB_accuracy_score = metrics.accuracy_score(y_test, GaussianNB_pred)
GaussianNB_f1_score = metrics.f1_score(y_test, GaussianNB_pred)
GaussianNB_roc_auc_score = metrics.roc_auc_score(y_test, GaussianNB_pred)
print("GaussianNB:")
print("  Accuracy: ", GaussianNB_accuracy_score)
print("  F1_score: ", GaussianNB_f1_score)
print("  AUC ROC: ", GaussianNB_roc_auc_score)

# SVC
SVC_accuracy_score = metrics.accuracy_score(y_test, SVC_pred)
SVC_f1_score = metrics.f1_score(y_test, SVC_pred)
SVC_roc_auc_score = metrics.roc_auc_score(y_test, SVC_pred)
print("\nSVC:")
print("  Accuracy: ", SVC_accuracy_score)
print("  F1_score: ", SVC_f1_score)
print("  AUC ROC: ", SVC_roc_auc_score)

# Random_Forest
Random_Forest_accuracy_score = metrics.accuracy_score(y_test, Random_Forest_pred)
Random_Forest_f1_score = metrics.f1_score(y_test, Random_Forest_pred)
Random_Forest_roc_auc_score = metrics.roc_auc_score(y_test, Random_Forest_pred)
print("\nRandomForestClassifier:")
print("  Accuracy: ", Random_Forest_accuracy_score)
print("  F1_score: ", Random_Forest_f1_score)
print("  AUC ROC: ", Random_Forest_roc_auc_score)

结果:

这里写图片描述
通过比较可以看出第三种算法Random Forest Classifier的性能更优。

Documentation and Reference

Documentation:
http://scikit-learn.org/stable/documentation.html
Reference Manual with class descriptions:
http://scikit-learn.org/stable/modules/classes.html

其他部分 d3 代码与 d2 相同,但在对原数据添加特征中 d3 要求“添加merged_data的经纬度定位信息”,d2 要求: 在d2中整理出新的特征,主要是例如: 1、昨天同一时间段案发数 2、一内同一时间段案发平均数 3、前2年,该日期同一时间段案发平均数。”输出完成对 d3 要求的代码 merged_data.head() DR_NO Date Rptd DATE OCC TIME OCC AREA AREA NAME Rpt Dist No 0 200815333 2020-10-15 2020-10-15 2000 8 West LA 814 1 200914052 2020-08-27 2020-08-27 1255 9 Van Nuys 935 2 200810920 2020-06-20 2020-06-20 1000 8 West LA 841 3 200811087 2020-06-24 2020-06-23 2200 8 West LA 898 4 200104054 2020-01-02 2020-01-01 2330 1 Central 135 Part 1-2 Crm Cd Crm Cd Desc … Year Month Day Hour 0 2 624 BATTERY - SIMPLE ASSAULT … 2020 10 15 20 1 2 624 BATTERY - SIMPLE ASSAULT … 2020 8 27 12 2 2 624 BATTERY - SIMPLE ASSAULT … 2020 6 20 10 3 2 624 BATTERY - SIMPLE ASSAULT … 2020 6 23 22 4 2 624 BATTERY - SIMPLE ASSAULT … 2020 1 1 23 Time Period Day of Week Date Is Holiday 天气 季节 0 20-21 星期四 2020-10-15 0 晴 秋季 1 12-13 星期四 2020-08-27 0 晴 夏季 2 10-11 星期六 2020-06-20 0 晴 夏季 3 22-23 星期二 2020-06-23 0 阴 夏季 4 23-24 星期三 2020-01-01 1 阴 冬季 merged_data.columns Index(['DR_NO', 'Date Rptd', 'DATE OCC', 'TIME OCC', 'AREA', 'AREA NAME', 'Rpt Dist No', 'Part 1-2', 'Crm Cd', 'Crm Cd Desc', 'Mocodes', 'Vict Age', 'Vict Sex', 'Vict Descent', 'Premis Cd', 'Premis Desc', 'Weapon Used Cd', 'Weapon Desc', 'Status', 'Status Desc', 'Crm Cd 1', 'LOCATION', 'LAT', 'LON', 'Year', 'Month', 'Day', 'Hour', 'Time Period', 'Day of Week', 'Date', 'Is Holiday', '天气', '季节', 'DATETIME OCC', '年', '月', '日', '小时'], dtype='object') print(d3) 年 月 日 小时 Case Count 天气 季节 Day of Week Is Holiday 0 2020 1 1 0 12 阴 冬季 星期三 1 1 2020 1 1 1 4 阴 冬季 星期三 1 2 2020 1 1 2 3 阴 冬季 星期三 1 3 2020 1 1 3 6 阴 冬季 星期三 1 4 2020 1 1 4 6 阴 冬季 星期三 1 … … … … … … … … … … 23848 2023 10 2 13 1 多云 秋季 星期一 0 23849 2023 10 2 14 2 多云 秋季 星期一 0 23850 2023 10 2 15 1 多云 秋季 星期一 0 23851 2023 10 2 17 1 多云 秋季 星期一 0 23852 2023 10 2 23 1 多云 秋季 星期一 0 [23853 rows x 9 columns]
最新发布
06-15
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值