用代码完成high_diamond_ranked_10min.csv处理和特征工程,首先是写入对应数据信息的探索与分析,进行数据预处理用数据类型转换,按过滤法对数据进行特征选择,挑选出最优特征数,对两类数据用PCA算法降到2维后,进行可视化展示。对完整数据进PCA降维,用碎石图选择合适的降维后特征范围。在一个图中绘制不同特征数对应决策树和随机森林准确率效果折线对比图。分别输出决策树和随机森林总特征数,和对应的准确率、输出特征过滤后的特征数,和对应的准确率、PCA降维后的特征数,和对应的准确率。
时间: 2024-03-19 14:46:09 浏览: 62
好的,我可以给你提供一些 Python 代码来完成这些任务。不过,需要注意的是,由于这个任务比较复杂,代码可能会比较长,而且需要使用一些第三方库,比如 pandas、numpy、scikit-learn 等,你需要先安装这些库。
首先,我们可以使用 pandas 库读取数据集,并进行一些基本的数据探索和分析:
```python
import pandas as pd
# 读取数据集
df = pd.read_csv('high_diamond_ranked_10min.csv')
# 查看数据集的基本信息
print(df.info())
# 查看数据集的统计信息
print(df.describe())
```
接着,我们可以进行数据预处理,包括数据类型转换、缺失值处理、异常值处理等:
```python
# 将 object 类型的数据转换为数值类型
df['blueFirstBlood'] = df['blueFirstBlood'].astype(int)
df['blueDragons'] = df['blueDragons'].astype(int)
df['blueHeralds'] = df['blueHeralds'].astype(int)
df['blueTowersDestroyed'] = df['blueTowersDestroyed'].astype(int)
df['blueTotalGold'] = df['blueTotalGold'].astype(float)
# 其他特征同理
# 处理缺失值
df = df.dropna()
# 处理异常值
# 这里可以根据实际情况进行处理,比如使用箱线图等方法来检测和处理异常值
```
然后,我们可以使用过滤法对数据进行特征选择,挑选出最优特征数:
```python
from sklearn.feature_selection import SelectKBest
from sklearn.feature_selection import f_regression
# 选择最优特征数
X = df.drop(['blueWins'], axis=1)
y = df['blueWins']
selector = SelectKBest(f_regression, k=5)
selector.fit(X, y)
X_new = selector.transform(X)
print('最优特征数:', X_new.shape[1])
```
接着,我们可以使用 PCA 算法对两类数据进行降维,然后进行可视化展示:
```python
from sklearn.decomposition import PCA
import matplotlib.pyplot as plt
# 对两类数据进行降维
pca = PCA(n_components=2)
X_pca = pca.fit_transform(X)
# 可视化展示
plt.scatter(X_pca[:, 0], X_pca[:, 1], c=y)
plt.show()
```
在对完整数据进行 PCA 降维之后,我们可以使用碎石图选择合适的降维后特征范围:
```python
from sklearn.decomposition import PCA
from sklearn.pipeline import Pipeline
from sklearn.model_selection import GridSearchCV
from sklearn.tree import DecisionTreeClassifier
# 使用 Pipeline 构建 PCA 和决策树分类器
pipe = Pipeline([('pca', PCA()), ('tree', DecisionTreeClassifier(random_state=42))])
# 设置参数范围
param_grid = {'pca__n_components': [2, 3, 4, 5, 6, 7, 8, 9, 10],
'tree__max_depth': [2, 3, 4, 5, 6, 7, 8, 9, 10]}
# 使用 GridSearchCV 进行碎石图选择
grid = GridSearchCV(pipe, param_grid=param_grid, cv=10)
grid.fit(X, y)
print('最优特征数和最大深度:', grid.best_params_)
```
最后,我们可以在一个图中绘制不同特征数对应决策树和随机森林准确率效果折线对比图,并输出决策树和随机森林总特征数,和对应的准确率、输出特征过滤后的特征数,和对应的准确率、PCA 降维后的特征数,和对应的准确率:
```python
from sklearn.tree import DecisionTreeClassifier
from sklearn.ensemble import RandomForestClassifier
from sklearn.metrics import accuracy_score
# 定义不同特征数的列表
feature_nums = [5, 10, 15, 20, 25, 30, 35, 40, 45, 50]
# 定义决策树分类器和随机森林分类器
tree_clf = DecisionTreeClassifier(random_state=42)
rf_clf = RandomForestClassifier(random_state=42)
# 定义准确率列表
tree_accs = []
rf_accs = []
# 对不同特征数进行循环
for n in feature_nums:
# 使用过滤法选择特征
selector = SelectKBest(f_regression, k=n)
selector.fit(X, y)
X_new = selector.transform(X)
# 对特征选择后的数据进行训练和测试
tree_clf.fit(X_new, y)
rf_clf.fit(X_new, y)
tree_pred = tree_clf.predict(X_new)
rf_pred = rf_clf.predict(X_new)
tree_acc = accuracy_score(y, tree_pred)
rf_acc = accuracy_score(y, rf_pred)
# 添加准确率到列表中
tree_accs.append(tree_acc)
rf_accs.append(rf_acc)
# 对 PCA 降维后的数据进行训练和测试
pca = PCA(n_components=10)
X_pca = pca.fit_transform(X)
tree_clf.fit(X_pca, y)
rf_clf.fit(X_pca, y)
tree_pred = tree_clf.predict(X_pca)
rf_pred = rf_clf.predict(X_pca)
tree_acc = accuracy_score(y, tree_pred)
rf_acc = accuracy_score(y, rf_pred)
# 输出决策树和随机森林总特征数,和对应的准确率
print('决策树总特征数:', len(df.columns) - 1)
print('随机森林总特征数:', len(df.columns) - 1)
print('决策树准确率:', tree_acc)
print('随机森林准确率:', rf_acc)
# 输出特征过滤后的特征数,和对应的准确率
print('特征过滤后的最优特征数:', feature_nums[tree_accs.index(max(tree_accs))])
print('特征过滤后的决策树准确率:', max(tree_accs))
print('特征过滤后的随机森林准确率:', max(rf_accs))
# 输出 PCA 降维后的特征数,和对应的准确率
print('PCA 降维后的特征数:', pca.n_components_)
print('PCA 降维后的决策树准确率:', tree_acc)
print('PCA 降维后的随机森林准确率:', rf_acc)
# 绘制不同特征数对应决策树和随机森林准确率效果折线对比图
plt.plot(feature_nums, tree_accs, label='Decision Tree')
plt.plot(feature_nums, rf_accs, label='Random Forest')
plt.axhline(y=tree_acc, color='r', linestyle='--', label='PCA Decision Tree')
plt.axhline(y=rf_acc, color='g', linestyle='--', label='PCA Random Forest')
plt.xlabel('Number of Features')
plt.ylabel('Accuracy')
plt.legend()
plt.show()
```
在运行这段代码之后,就可以得到不同特征数对应决策树和随机森林准确率效果折线对比图,并输出决策树和随机森林总特征数,和对应的准确率、输出特征过滤后的特征数,和对应的准确率、PCA 降维后的特征数,和对应的准确率。
阅读全文