美文网首页
08 使用神经网络预测红酒质量、使用决策树识别鸢尾花

08 使用神经网络预测红酒质量、使用决策树识别鸢尾花

作者: 夏威夷的芒果 | 来源:发表于2018-09-05 17:59 被阅读144次

使用神经网络预测红酒质量

数据形式

看看这个数据集是不是多分类问题呢?
使用seaborn看看情况。


与其说是多分类,不如说是二分类,因为数据不平衡,可以把小于等于五的设置成0,大于五的设置成1 image.png

代码

# -*- coding: utf-8 -*-
# 所需数据请在这里下载:https://video.mugglecode.com/wine_quality.csv

"""
    任务:红酒质量预测
"""
import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import MinMaxScaler
from sklearn.neural_network import MLPClassifier

DATA_FILE = './data/wine_quality.csv'


def main():
    """
        主函数
    """
    wine_data = pd.read_csv(DATA_FILE)
    # sns.countplot(data=wine_data, x='quality')
    # plt.show()

    # 数据预处理
    wine_data.loc[wine_data['quality'] <= 5, 'quality'] = 0
    wine_data.loc[wine_data['quality'] >= 1, 'quality'] = 1

    # sns.countplot(data=wine_data, x='quality')
    # plt.show()

    # 所有列名
    all_cols = wine_data.columns.tolist()

    # 特征列名称
    feat_cols = all_cols[:-1]

    # 特征
    X = wine_data[feat_cols].values
    # 标签
    y = wine_data['quality'].values

    # 数据集分割
    X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=1/3, random_state=10)

    # 特征归一化
    scaler = MinMaxScaler()
    X_train_scaled = scaler.fit_transform(X_train)
    X_test_scaled = scaler.transform(X_test)

    # 建立模型
    mlp = MLPClassifier(hidden_layer_sizes=(50, 50, 100), activation='relu')
    mlp.fit(X_train_scaled, y_train)
    accuracy = mlp.score(X_test_scaled, y_test)
    print('神经网络模型的预测准确率:{:.2f}%'.format(accuracy * 100))


if __name__ == '__main__':
    main()

使用决策树识别鸢尾花

朴素的决策树 使用决策树判断鸢尾花 信息增益
# -*- coding: utf-8 -*-
# 所需数据集请下载:https://video.mugglecode.com/Iris.csv

"""
    任务:鸢尾花识别
"""
import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.tree import DecisionTreeClassifier

DATA_FILE = './data/Iris.csv'

CATEGRORY_LABEL_DICT = {
        'Iris-setosa':      0,  # 山鸢尾
        'Iris-versicolor':  1,  # 变色鸢尾
        'Iris-virginica':   2   # 维吉尼亚鸢尾
    }

# 使用的特征列
FEAT_COLS = ['SepalLengthCm', 'SepalWidthCm', 'PetalLengthCm', 'PetalWidthCm']


def main():
    """
        主函数
    """
    iris_data = pd.read_csv(DATA_FILE, index_col='Id')

    # 添加label一列作为预测标签
    iris_data['Label'] = iris_data['Species'].apply(lambda category_name: CATEGRORY_LABEL_DICT[category_name])

    # 4列花的属性作为样本特征
    X = iris_data[FEAT_COLS].values
    # label列为样本标签
    y = iris_data['Label'].values

    # 将原始数据集拆分成训练集和测试集,测试集占总样本数的1/3
    X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=1/3, random_state=10)

    # 构建模型
    max_depth_list = [2, 3, 4]   #指定决策树的深度

    for max_depth in max_depth_list:
        dt_model = DecisionTreeClassifier(max_depth=max_depth)
        dt_model.fit(X_train, y_train)

        train_acc = dt_model.score(X_train, y_train)
        test_acc = dt_model.score(X_test, y_test)

        print('max_depth', max_depth)
        print('训练集上的准确率:{:.2f}%'.format(train_acc * 100))
        print('测试集上的准确率:{:.2f}%'.format(test_acc * 100))
        print()


if __name__ == '__main__':
    main()

如果决策树选择得太深,会造成过拟合

max_depth 2
训练集上的准确率:97.00%
测试集上的准确率:92.00%

max_depth 3
训练集上的准确率:98.00%
测试集上的准确率:92.00%

max_depth 4
训练集上的准确率:100.00%
测试集上的准确率:90.00%

这里选择2、3比较合适。

image.png

相关文章

网友评论

      本文标题:08 使用神经网络预测红酒质量、使用决策树识别鸢尾花

      本文链接:https://www.haomeiwen.com/subject/hytzwftx.html