数据挖掘模型学习--分类

1 数据处理

1.1 读取数据集

data = pd.read_excel('./data/bankloan.xls')
print(data.head())
print(data.shape)


共700条数据,前8列为特征,最后1列为标签,'0'代表未违约,'1'代表违约

1.2 数据集划分

X = data.iloc[:, :-1]
y = data.iloc[:, -1]

将特征与标签分别提取出来后,再进行训练集与测试集的划分

from sklearn.model_selection import train_test_split

X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=4)

2 使用K近邻(KNN)进行分类

2.1 模型初始化与训练

from sklearn.neighbors import KNeighborsClassifier

knn = KNeighborsClassifier(n_neighbors=2)
knn.fit(X_train, y_train)

2.2 模型预测与评估

from sklearn.metrics import classification_report

pred = knn.predict(X_test)
print(classification_report(y_test, pred))

得到结果如下:

可以看出分类的准确率为76%

2.3 画出混淆矩阵

def cm_plot(y, yp):
    from sklearn.metrics import confusion_matrix #导入混淆矩阵函数
    cm = confusion_matrix(y, yp) #混淆矩阵
    plt.matshow(cm, cmap=plt.cm.Greens) #画混淆矩阵图,配色风格使用cm.Greens,更多风格请参考官网。
    plt.colorbar() #颜色标签
    for x in range(len(cm)): #数据标签
        for y in range(len(cm)):
            plt.annotate(cm[y, x], xy=(x, y), horizontalalignment='center', verticalalignment='center')
    plt.ylabel('True label') #坐标轴标签
    plt.xlabel('Predicted label') #坐标轴标签

cm_plot(y_test, pred)

3 使用神经网络进行分类

3.1 创建神经网络与训练

from keras.models import Sequential
from keras.layers import  Dense,Dropout

model = Sequential()
# input_dim表示数据集的特征维度
model.add(Dense(64,input_dim=8,activation='relu'))
# Drop防止过拟合的数据处理方式
model.add(Dropout(0.5))
model.add(Dense(64,activation='relu'))
model.add(Dropout(0.5))
model.add(Dense(1,activation='sigmoid'))

# 编译模型,定义损失函数,优化函数,绩效评估函数
# binary_crossentropy 是二元分类问题会优先选择使用的损失函数
model.compile(loss='binary_crossentropy',
              optimizer='rmsprop',
              metrics=['accuracy'])

# 导入数据进行训练
model.fit(X_train,y_train,epochs=100,batch_size=128)

3.2 模型预测与评估

yp = model.predict(X_test)
yp[yp>0.5] = 1
yp[yp<0.5] = 0

# 模型评估
score  = model.evaluate(X_test,y_test,batch_size=128)
print(score)


最终得到,损失值:0.4662424623966217 准确率:0.8142856955528259

3.3 画出混淆矩阵

cm_plot(y_test, yp)

对比:两种分类模型最终得到的准确率相差不大,神经网络模型稍微要比K邻近模型好一点,并且还可以提高迭代次数。

posted @ 2022-03-27 17:41  Lincoln_H  阅读(181)  评论(0编辑  收藏  举报