用代码完成high_diamond_ranked_10min.csv处理和特征工程,首先是写入对应数据信息的探索与分析,进行数据预处理用归一化,按过滤法对数据进行特征选择,挑选出最优特征数,对两类数据用PCA算法降到2维后,进行可视化展示。对完整数据进PCA降维,用碎石图选择合适的降维后特征范围。在一个图中绘制不同特征数对应决策树和随机森林准确率效果折线对比图。分别输出决策树和随机森林总特征数,和对应的准确率、输出特征过滤后的特征数,和对应的准确率、PCA降维后的特征数,和对应的准确率。
时间: 2024-03-18 15:40:34 浏览: 104
好的,我将逐步回答你的问题。
首先,我们需要导入所需的库和数据:
```python
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
# 导入数据
data = pd.read_csv('high_diamond_ranked_10min.csv')
```
然后,我们需要对数据进行基本的探索和分析:
```python
# 查看前五行数据
data.head()
# 查看数据的基本信息
data.info()
# 查看数据的统计信息
data.describe()
```
接下来,我们需要对数据进行预处理和归一化:
```python
# 将目标变量提取出来,作为y值
y = data.pop('blueWins').values
# 进行归一化处理
from sklearn.preprocessing import StandardScaler
scaler = StandardScaler()
X = scaler.fit_transform(data)
```
接着,我们将使用过滤法对数据进行特征选择,选择最优特征数:
```python
# 导入SelectKBest和f_classif
from sklearn.feature_selection import SelectKBest, f_classif
# 创建SelectKBest对象,选择最优特征数
select = SelectKBest(f_classif, k=10)
# 进行特征选择
X_selected = select.fit_transform(X, y)
# 查看所选特征的列名
data.columns[select.get_support()]
```
然后,我们将对两类数据使用PCA算法进行降维,并将其可视化:
```python
# 导入PCA
from sklearn.decomposition import PCA
# 创建PCA对象,将数据降到2维
pca = PCA(n_components=2)
X_pca = pca.fit_transform(X_selected)
# 将降维后的数据可视化
plt.scatter(X_pca[:, 0], X_pca[:, 1], c=y, cmap='rainbow')
plt.xlabel('PCA 1')
plt.ylabel('PCA 2')
plt.show()
```
现在,我们将对完整数据进行PCA降维,并使用碎石图选择合适的特征范围:
```python
# 创建PCA对象,将数据降到50维
pca = PCA(n_components=50)
X_pca = pca.fit_transform(X)
# 使用碎石图选择合适的特征范围
plt.plot(np.cumsum(pca.explained_variance_ratio_))
plt.xlabel('Number of Components')
plt.ylabel('Cumulative Explained Variance')
plt.show()
```
接下来,我们将在一个图中绘制不同特征数对应决策树和随机森林准确率效果折线对比图:
```python
# 导入模型和评估指标
from sklearn.tree import DecisionTreeClassifier
from sklearn.ensemble import RandomForestClassifier
from sklearn.metrics import accuracy_score
from sklearn.model_selection import train_test_split
# 初始化决策树和随机森林模型
dt = DecisionTreeClassifier(random_state=42)
rf = RandomForestClassifier(random_state=42)
# 初始化特征数和准确率列表
feature_nums = []
dt_scores = []
rf_scores = []
# 对不同的特征数进行训练和测试,记录准确率
for i in range(1, X.shape[1]+1):
# 创建SelectKBest对象,选择特征数
select = SelectKBest(f_classif, k=i)
X_selected = select.fit_transform(X, y)
# 分割数据集
X_train, X_test, y_train, y_test = train_test_split(X_selected, y, test_size=0.2, random_state=42)
# 训练决策树和随机森林模型
dt.fit(X_train, y_train)
rf.fit(X_train, y_train)
# 计算准确率
dt_score = accuracy_score(y_test, dt.predict(X_test))
rf_score = accuracy_score(y_test, rf.predict(X_test))
# 记录特征数和准确率
feature_nums.append(i)
dt_scores.append(dt_score)
rf_scores.append(rf_score)
# 绘制折线图
plt.plot(feature_nums, dt_scores, label='Decision Tree')
plt.plot(feature_nums, rf_scores, label='Random Forest')
plt.xlabel('Number of Features')
plt.ylabel('Accuracy')
plt.legend()
plt.show()
```
最后,我们将输出决策树和随机森林总特征数和对应的准确率、输出特征过滤后的特征数和对应的准确率、PCA降维后的特征数和对应的准确率:
```python
# 输出决策树和随机森林总特征数和对应的准确率
print('Total Features\tDecision Tree Accuracy\tRandom Forest Accuracy')
print('{}\t\t{:.4f}\t\t\t{:.4f}'.format(X.shape[1], dt_scores[-1], rf_scores[-1]))
# 输出特征过滤后的特征数和对应的准确率
best_feature_num = dt_scores.index(max(dt_scores)) + 1
print('Best Feature Number\tDecision Tree Accuracy\tRandom Forest Accuracy')
print('{}\t\t\t{:.4f}\t\t\t{:.4f}'.format(best_feature_num, dt_scores[best_feature_num-1], rf_scores[best_feature_num-1]))
# 输出PCA降维后的特征数和对应的准确率
pca_feature_num = 2
print('PCA Feature Number\tDecision Tree Accuracy\tRandom Forest Accuracy')
print('{}\t\t\t{:.4f}\t\t\t{:.4f}'.format(pca_feature_num, dt_scores[pca_feature_num-1], rf_scores[pca_feature_num-1]))
```
以上就是用代码完成high_diamond_ranked_10min.csv处理和特征工程的完整流程,希望对你有所帮助。
阅读全文