实验报告
课程名称:
数据挖掘
学
院:
计算机科学与工程学院
专
业: 软件工程 班
级: 2016-1
姓
名: 陈 立
学
号:201601060801
2019 年 5 月 31 日
山 东 科 技 大 学 教 务 处 制
目录
数据挖掘课程实验报告 ................................................................................................................................................3
一、实验要求..................................................................................................................................................3
二、数据说明..................................................................................................................................................3
三、实验内容..................................................................................................................................................3
(1)环境:..........................................................................................................................................3
(2)编程语言......................................................................................................................................3
(3)算法思想:..................................................................................................................................3
四、任务分析..................................................................................................................................................5
五、程序实现..................................................................................................................................................6
1.数据预处理 .........................................................................................................................................6
2.数据划分及模型训练等操作 ............................................................................................................ 7
3. 使用决策树模型预测并得到结果:.............................................................................................. 7
4.调试过程 .............................................................................................................................................8
六、实验总结................................................................................................................................................10
数据挖掘课程实验报告
一、实验要求
本次设计要求实现信贷用户逾期预测功能。具体要求如下:利用所学数据挖掘算法对给定
数据进行训练得出信用评估模型,依据模型对 1000 个贷款申请人是否逾期做出预测(0-未逾
期 1-逾期)。
二、数据说明
数据概述 :
数据包括脱敏后的个人基本信息、持卡信息、消费信息及信贷信息等。详见字段解释.xlsx。
数据结构和数据规模 :
数据分为训练集和验证集。 详见 model.csv 和 test.csv。
三、实验内容
(1)环境:windows10、python3、Anaconda Navigator
(2)编程语言:python
(3)算法思想:
SVM(support Vector Mac)又称为支持向量机,是一种二分类的模型。当然如果进行修改之后也是可
以用于多类别问题的分类。支持向量机可以分为线性核非线性两大类。其主要思想为找到空间中的一个更
够将所有数据样本划开的超平面,并且使得本本集中所有数据到这个超平面的距离最短。
《统计学习方法》对 SVM 的数学原理做了详细推导与论述,本文仅做整理。由简至繁 SVM 可分类为三
类:线性可分(linear SVM in linearly separable case)的线性 SVM、线性不可分的线性 SVM、非线性(nonlinear)
SVM。
对于二类分类问题,训练集 T={(x1,y1),(x2,y2),⋯,(xN,yN)},其类别 yi∈{0,1},线性 SVM 通过学习得到
分离超平面(hyperplane):
w⋅x+b=0
以及相应的分类决策函数: f(x)=sign(w⋅x+b)
有如下图所示的分离超平面
直观上,超平面 B1 的分类效果更好一些。将距离分离超平面最近的两个不同类别的样本点称为支持向量
(support vector)的,构成了两条平行于分离超平面的长带,二者之间的距离称之为 margin。显然,margin
更大,则分类正确的确信度更高(与超平面的距离表示分类的确信度,距离越远则分类正确的确信度越高)。
通过计算容易得到:
从上图中可观察到:margin 以外的样本点对于确定分离超平面没有贡献,换句话说,SVM 是有很重要的训
练样本(支持向量)所确定的。至此,SVM 分类问题可描述为在全部分类正确的情况下,最大化
(等
价于最小化
);线性分类的约束最优化问题:
对每一个不等式约束引进拉格朗日乘子(Lagrange multiplier)αi≥0,i=1,2,⋯,N;构造拉格朗日函数
(Lagrange function):
根据拉格朗日对偶性,原始的约束最优化问题可等价于极大极小的对偶问题:
将 L(w,b,α)对 w,b 求偏导并令其等于 0,则
将上述式子代入拉格朗日函数(3)中,对偶问题转为
等价于最优化问题:
线性可分是理想情形,大多数情况下,由于噪声或特异点等各种原因,训练样本是线性不可分的。因此,
需要更一般化的学习算法。
四、任务分析
1. 导入数据后,首先,由于数据中存在缺失值,因此需要对缺失值数据进行预处理。
2. 其次,对明显与模型无关的特征进行删除。
3. 最后,分别采用 SVM 进行模型训练,预测结果以及输出评分。
五、程序实现
1.数据预处理
(1)删除
dataset=dataset.drop(["user_id","x_062","x_063","x_064", …… ,"x_101","x_118","x_119","x_120"],axis=1)
(2)类型转换
dataset = dataset.convert_objects(convert_numeric=True)
(3)使用 0 替换以下列所有 NaN 的值
fill_zero_cols = ['x_121','x_122','x_123', …… ,'x_074','x_075','x_076','x_077','x_078','x_079','x_080']
for col in fill_zero_cols:
dataset.loc[dataset[col].isnull(), col] = 0
(4)均值替换以下空值
fill_mean_cols = ['x_065','x_066','x_067',…… ,'x_098','x_099','x_102','x_103',……,'x_115' ,'x_130']
for col in fill_mean_cols:
dataset.loc[dataset[col].isnull(), col] = dataset[col].mean()
(5)使用众数替换剩下所有空值
col = dataset.columns.tolist()[1:]
def missing(df, columns):
col = columns
for i in col:
df[i].fillna(df[i].mode()[0], inplace=True)
df[i] = df[i].astype('float')
missing(dataset, col)
2.数据划分及模型训练等操作
(1)数据划分
X = dataset.drop(["y"],axis=1)
Y = dataset["y"]
X_train, X_test, y_train, y_test = train_test_split(X, Y,test_size=0.2, random_state=6000)
(2)归一化操作
from sklearn.preprocessing import minmax_scale
X_train = minmax_scale(X_train)
X_test =
minmax_scale(X_test)
(3)模型训练
linearSVC = LinearSVC()
linearSVC.fit(X_train, y_train)
linearSVC_predict = linearSVC.predict(X_test)
(4)输出
print("predict:",linearSVC.score(X_test, y_test))
3. 使用决策树模型预测并得到结果:
testdata = pd.read_csv('C:\\Users\\tingf\\Desktop\\dazuoye\\dazuoye\\test.csv',encoding='gbk')
……
pY = linearSVC.predict(testdata)
……
print(pY)
4.调试过程
经过对数据的分析和实验后,我选择了将部分列分别做删除、用 0 和均值填充空值操作,将其余的列
中的空值用众数填充。
实验过程中,对于空值较多的列做预处理之后,发现这些列的预处理操作对实验结果的影响比较大,
列举记录下的数次结果如下:
(1)此次未保存 predict 值,大致等于 0.814 左右
predict: 0.8143
预测结果为:
(2)