用代码实现英雄联盟排位比赛数据处理和特征工程,首先是写入对应数据信息的探索,并输出总特征数,进行数据预处理填补空缺值,按过滤法对数据进行特征选择,挑选出最优特征数,对两类数据用PCA算法降到2维后,进行可视化展示。对完整数据进PCA降维,用碎石图选择合适的降维后特征范围。在一个图中绘制不同特征数对应决策树和随机森林准确率效果折线对比图。分别输出决策树和随机森林总特征数,和对应的准确率、输出特征过滤后的特征数,和对应的准确率、PCA降维后的特征数,和对应的准确率
时间: 2024-03-18 09:40:09 浏览: 63
英雄联盟钻石排位赛前10分钟-数据集
好的,我会为您提供一份代码实现英雄联盟排位比赛数据处理和特征工程的示例代码。这个示例代码包括了您提到的所有步骤:
1. 写入对应数据信息的探索,并输出总特征数
2. 进行数据预处理填补空缺值
3. 按过滤法对数据进行特征选择,挑选出最优特征数
4. 对两类数据用PCA算法降到2维后,进行可视化展示
5. 对完整数据进行PCA降维,用碎石图选择合适的降维后特征范围
6. 在一个图中绘制不同特征数对应决策树和随机森林准确率效果折线对比图
7. 分别输出决策树和随机森林总特征数,和对应的准确率,输出特征过滤后的特征数,和对应的准确率,PCA降维后的特征数,和对应的准确率
请注意,在运行代码之前,您需要预先安装以下库:
- pandas
- numpy
- sklearn
- matplotlib
以下是代码示例:
```python
import pandas as pd
import numpy as np
from sklearn.preprocessing import LabelEncoder, StandardScaler
from sklearn.feature_selection import SelectKBest, chi2, mutual_info_classif, f_classif
from sklearn.decomposition import PCA
from sklearn.tree import DecisionTreeClassifier
from sklearn.ensemble import RandomForestClassifier
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score
import matplotlib.pyplot as plt
from scipy.signal import find_peaks
# 1. 写入对应数据信息的探索,并输出总特征数
data = pd.read_csv('lol_data.csv')
print("数据信息:")
print(data.info())
print("总特征数:", len(data.columns))
# 2. 进行数据预处理填补空缺值
# 判断每个特征缺失值的个数
print("每个特征缺失值的个数:")
print(data.isnull().sum())
# 采用均值填充缺失值
data.fillna(data.mean(), inplace=True)
# 3. 按过滤法对数据进行特征选择,挑选出最优特征数
# 将非数值型特征进行编码
le = LabelEncoder()
for col in data.columns:
if data[col].dtype == 'object':
data[col] = le.fit_transform(data[col])
# 特征选择
X = data.drop(['result'], axis=1)
y = data['result']
skb = SelectKBest(mutual_info_classif, k=10)
skb.fit(X, y)
X_new = skb.transform(X)
print("最优特征数:", X_new.shape[1])
# 4. 对两类数据用PCA算法降到2维后,进行可视化展示
pca = PCA(n_components=2)
X_pca = pca.fit_transform(X_new)
plt.scatter(X_pca[:, 0], X_pca[:, 1], c=y)
plt.show()
# 5. 对完整数据进行PCA降维,用碎石图选择合适的降维后特征范围
pca = PCA()
pca.fit(X_new)
plt.plot(np.cumsum(pca.explained_variance_ratio_))
plt.xlabel('Number of Components')
plt.ylabel('Variance (%)')
plt.show()
# 碎石图找到合适的降维后特征数
peaks, _ = find_peaks(np.cumsum(pca.explained_variance_ratio_), height=0.02, distance=10)
n_components = peaks[0] + 1
print("合适的降维后特征数:", n_components)
# 6. 在一个图中绘制不同特征数对应决策树和随机森林准确率效果折线对比图
# 决策树
acc_dt = []
for i in range(1, X_new.shape[1]+1):
X_new_i = SelectKBest(mutual_info_classif, k=i).fit_transform(X, y)
X_train, X_test, y_train, y_test = train_test_split(X_new_i, y, test_size=0.3, random_state=42)
dt = DecisionTreeClassifier()
dt.fit(X_train, y_train)
y_pred = dt.predict(X_test)
acc_dt.append(accuracy_score(y_test, y_pred))
# 随机森林
acc_rf = []
for i in range(1, X_new.shape[1]+1):
X_new_i = SelectKBest(mutual_info_classif, k=i).fit_transform(X, y)
X_train, X_test, y_train, y_test = train_test_split(X_new_i, y, test_size=0.3, random_state=42)
rf = RandomForestClassifier()
rf.fit(X_train, y_train)
y_pred = rf.predict(X_test)
acc_rf.append(accuracy_score(y_test, y_pred))
plt.plot(range(1, X_new.shape[1]+1), acc_dt, label='Decision Tree')
plt.plot(range(1, X_new.shape[1]+1), acc_rf, label='Random Forest')
plt.xlabel('Number of Features')
plt.ylabel('Accuracy')
plt.legend()
plt.show()
# 7. 分别输出决策树和随机森林总特征数,和对应的准确率,输出特征过滤后的特征数,和对应的准确率,PCA降维后的特征数,和对应的准确率
# 决策树和随机森林总特征数及对应准确率
dt = DecisionTreeClassifier()
dt.fit(X_train, y_train)
y_pred = dt.predict(X_test)
print("决策树总特征数:", X_new.shape[1])
print("决策树准确率:", accuracy_score(y_test, y_pred))
rf = RandomForestClassifier()
rf.fit(X_train, y_train)
y_pred = rf.predict(X_test)
print("随机森林总特征数:", X_new.shape[1])
print("随机森林准确率:", accuracy_score(y_test, y_pred))
# 特征过滤后的特征数及对应准确率
X_new = SelectKBest(mutual_info_classif, k=10).fit_transform(X, y)
X_train, X_test, y_train, y_test = train_test_split(X_new, y, test_size=0.3, random_state=42)
dt = DecisionTreeClassifier()
dt.fit(X_train, y_train)
y_pred = dt.predict(X_test)
print("特征过滤后的特征数:", X_new.shape[1])
print("特征过滤后的准确率:", accuracy_score(y_test, y_pred))
rf = RandomForestClassifier()
rf.fit(X_train, y_train)
y_pred = rf.predict(X_test)
print("特征过滤后的特征数:", X_new.shape[1])
print("特征过滤后的准确率:", accuracy_score(y_test, y_pred))
# PCA降维后的特征数及对应准确率
pca = PCA(n_components=n_components)
X_pca = pca.fit_transform(X)
X_train, X_test, y_train, y_test = train_test_split(X_pca, y, test_size=0.3, random_state=42)
dt = DecisionTreeClassifier()
dt.fit(X_train, y_train)
y_pred = dt.predict(X_test)
print("PCA降维后的特征数:", n_components)
print("PCA降维后的准确率:", accuracy_score(y_test, y_pred))
rf = RandomForestClassifier()
rf.fit(X_train, y_train)
y_pred = rf.predict(X_test)
print("PCA降维后的特征数:", n_components)
print("PCA降维后的准确率:", accuracy_score(y_test, y_pred))
```
这份代码可以作为英雄联盟排位比赛数据处理和特征工程的参考,但需要注意的是,具体的数据处理和特征工程方法需要根据实际数据情况进行调整。
阅读全文