import pandas as pd
import numpy as np
import plotly_express as px
from matplotlib import pyplot as plt
import seaborn as sns
from sklearn.preprocessing import LabelEncoder, StandardScaler
from sklearn.decomposition import PCA
from sklearn.cluster import KMeans
from sklearn.naive_bayes import GaussianNB
from sklearn.model_selection import train_test_split, cross_val_score, learning_curve, StratifiedKFold, GridSearchCV
from sklearn.linear_model import LogisticRegression
from sklearn.metrics import confusion_matrix, roc_auc_score, roc_curve, auc, classification_report
import joblib
import warnings
warnings.filterwarnings('ignore')
"""
数据基本信息
"""
data = pd.read_csv("mushrooms.csv")
print(data.isnull().sum()) # 查看缺失值
# 统计有毒和无毒的数量对比[有毒p, 无毒e]
print(data["class"].value_counts()) # e:4208 p:3916
# 我们可以看到数据集中具有字符串中的值。我们需要将所有唯一值转换为整数。因此,我们对数据执行编码标签。
labelencoder = LabelEncoder()
data_labelencoder = data.copy()
for col in data_labelencoder.columns:
data_labelencoder[col] = labelencoder.fit_transform(data_labelencoder[col])
print(data_labelencoder.head())
# 随便检查某一列的编码值结果
print(data_labelencoder['stalk-color-above-ring'].unique()) # array([7, 3, 6, 4, 0, 2, 5, 1, 8])
print(data_labelencoder.groupby("stalk-color-above-ring").size())
"""
可视化分析——菌盖颜色
"""
# 计算每种菌盖颜色的次数
cap = data["cap-color"].value_counts().reset_index()
cap.columns = ["color", "number"]
print(cap)
# 绘制数量统计图
fig = px.bar(cap, x="color", y="number", color="number", text="number", color_continuous_scale="rainbow")
fig.show()
# 到底有毒的蘑菇是哪几种颜色较多了?统计有毒和无毒下的颜色分布:
cap_class = data.groupby(["class", "cap-color"]).size().reset_index()
cap_class.columns = ["class", "color", "number"]
print(cap_class.head())
# 绘制数量统计图 -> 小结:[颜色n、g、e]在有毒p情况是比较多的。
fig = px.bar(cap_class, x="color", y="number", color="class", text="number", barmode="group")
fig.show()
"""
可视化分析——菌的气味
"""
# 统计每种气味的数量
odor = data["odor"].value_counts().reset_index()
odor.columns = ["odor", "number"]
print(odor)
# 绘制数量统计图
fig = px.bar(odor, x="odor", y="number", color="number", text="number", color_continuous_scale="rainbow")
fig.show()
# 上面是针对整体数据的情况,下面分有毒和无毒来继续讨论
odor_class = data.groupby(["class", "odor"]).size().reset_index()
odor_class.columns = ["class", "odor", "number"]
print(odor_class.head())
# 绘制数量统计图 -> 小结:f这种气味是最容易造成有毒
fig = px.bar(odor_class, x="odor", y="number", color="class", text="number", barmode="group")
fig.show()
"""
特征相关性:只适用于数值型变量,因此要使用编码后的数据即 -> data_labelencoder
"""
sns.heatmap(data_labelencoder.corr(), annot=True, cmap='mako')
plt.show()
"""
特征工程
"""
# 1.特征转换:原数据中的特征都是文本类型,我们将其转成数值型,方便后续分析。
# 转换结果在上面已经完成,转换结果为 -> data_labelencoder
# 2.数据分布:查看数据转换编码后的数据分布情况
print(data_labelencoder["stalk-color-above-ring"].value_counts())
# 绘制箱型图(它能显示出一组数据的最大值、最小值、中位数及上下四分位数)和分布散点图
ax = sns.boxplot(x='class', y='stalk-color-above-ring', data=data_labelencoder)
ax = sns.stripplot(x="class", y='stalk-color-above-ring', data=data_labelencoder, jitter=True, edgecolor="gray")
plt.title("Class w.r.t stalkcolor above ring", fontsize=12)
plt.show()
# 3.分离特征和标签
X = data_labelencoder.iloc[:, 1:23] # 特征
y = data_labelencoder.iloc[:, 0] # 标签
# 4.数据标准化【归一化(Normalization)、标准化(Standardization)】
scaler = StandardScaler() # 标准化后的数值范围处于(-1,1)
X = scaler.fit_transform(X)
print(X)
"""
主成分分析PCA
"""
# 1.PCA过程:原始数据中22个属性可能并不是特征都是有效数据,或者说某些属性本身就存在一定的关系,造成了特征属性的重叠。我们采用主成分分析,先找出关键的特征
pca = PCA() # 定于PCA
pca.fit_transform(X) # PCA转化
covariance = pca.get_covariance() # 得到相关系数
explained_variance = pca.explained_variance_ # 得到每个变量对应的方差值
print(explained_variance) # 一共得到22个变量的方差值
# 通过绘图来展示每个主成分的得分关系 -> 结论:从图形中看出最后的4个主成分方差之和很小;前面的17个占据了90%以上的方差,可作为主成分。
with plt.style.context("dark_background"): # 黑色背景
plt.figure(figsize=(6, 4))
# 22表示主成分个数,explained_variance是方差值,alpha为透明度,align表示指定x轴上对齐方式,label为图标签
plt.bar(range(22), explained_variance, alpha=0.5, align="center", label="individual explained variance")
plt.ylabel('Explained variance ratio')
plt.xlabel('Principal components')
plt.legend(loc="best")
plt.tight_layout() # 自动调整子图参数
plt.show()
# 2. 观察2个主成分下的数据分布:我们利用基于2个属性的数据来实施K-means聚类
# 2.1 2个主成分下的原始数据分布
N = data_labelencoder.values
pca = PCA(n_components=2)
x = pca.fit_transform(N)
plt.figure(figsize=(5, 5))
plt.scatter(x[:, 0], x[:, 1])
plt.show()
# 2.2 实施聚类建模后的分布
km = KMeans(n_clusters=2,random_state=5)
N = data_labelencoder.values # numpy数组形式
X_clustered = km.fit_predict(N) # 建模结果0-1
label_color_map = {0: "g", 1: "y"} # 分类结果只有0和1,进行打标
label_color = [label_color_map[l] for l in X_clustered]
plt.figure(figsize=(5, 5))
plt.scatter(x[:, 0], x[:, 1], c=label_color)
plt.show()
# 3. 基于18主成分下的建模【共有22个特征,有四个主成分不需要,所以基于18个主成分建模】
pca_modified = PCA(n_components=18) # 先做基于18个主成分的转换
pca_modified.fit_transform(X)
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=4) # 8:2划分训练集和测试集
"""
定义学习曲线
"""
def plot_learning_curve(estimator, title, X, y, ylim=None, cv=None,n_jobs=None, train_sizes=np.linspace(0.1, 1.0, 5)):
plt.figure()
plt.title(title)
if ylim is not None:
plt.ylim(*ylim)
plt.xlabel("Training examples")
plt.ylabel("Score")
train_sizes, train_scores, test_scores = learning_curve(estimator, X, y, cv=cv, n_jobs=n_jobs, train_sizes=train_sizes)
train_scores_mean = np.mean(train_scores, axis=1)
train_scores_std = np.std(train_scores, axis=1)
test_scores_mean = np.mean(test_scores, axis=1)
test_scores_std = np.std(test_scores, axis=1)
plt.grid()
plt.fill_between(train_sizes, train_scores_mean - train_scores_std,
train_scores_mean + train_scores_std,
alpha=0.1, color="r")
plt.fill_between(train_sizes, test_scores_mean - test_scores_std,
test_scores_mean + test_scores_std,
alpha=0.1, color="g")
plt.plot(train_sizes, train_scores_mean, 'o-', color="r", label="Training score")
plt.plot(train_sizes, test_scores_mean, 'o-', color="g", label="Cross-validation score")
plt.legend(loc="best")
return plt
"""
模型1:逻辑回归
"""
model_LR1 = LogisticRegression()
# 在模型正式训练之前,在训练集上通过交叉验证进行模型最佳参数的选择
C =
没有合适的资源?快使用搜索试试~ 我知道了~
温馨提示
内容概要:该资源介绍了使用机器学习方法对毒蘑菇进行分类的实现。主要包含了逻辑回归、高斯朴素贝叶斯、支持向量机、随机森林、决策树和人工神经网络等六种监督学习模型的应用。 适用人群:对机器学习和分类算法感兴趣的学习者、数据科学家、机器学习工程师等。 使用场景及目标:本资源可用于学习如何使用不同的监督学习模型对毒蘑菇进行分类,帮助用户理解各种模型的原理和应用场景,并能够根据实际需求选择合适的模型进行分类任务。 其他说明:资源中提供了详细的代码示例和实验结果,以及对比不同模型在毒蘑菇分类任务上的性能评估,帮助用户深入理解各个模型的优缺点和适用范围。
资源推荐
资源详情
资源评论
收起资源包目录
6大监督模型实现毒蘑菇分类.zip (4个子文件)
6大监督模型实现毒蘑菇分类
mushrooms.csv 365KB
model_naive.pkl 1KB
ML_model.py 11KB
model_LR2.pkl 1KB
共 4 条
- 1
资源评论
王乐予
- 粉丝: 845
- 资源: 10
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功