机器学习每周一个小目标

任务

构建逻辑回归模型进行预测(在构建部分数据需要进行缺失值处理和数据类型转换,如果不能处理,可以直接暴力删除)
数据集

主要问题是根据数据建立一个逻辑回归模型来预测贷款是否逾期。

遇到的问题

  • encoding=‘gb18030’,为什么改为utf-8不可以?

  • 读取数据时报错

    data = pd.read_csv(path + ‘data.csv’)
    ‘utf-8’ codec can’t decode byte 0xbf in position 0: invalid start byte
    解决办法

    data = pd.read_csv(path + ‘data.csv’,encoding=‘gb18030’)

  • 对"latest_query_time"与"loans_latest_time"这两列怎么处理?

实现代码

主要分为五步:
1.数据处理

  • 对缺失值进行处理
  • 对包含中文数据进行映射
  • 对两个时间的不确定进行删除

2.划分训练集和验证集,验证集比例为test_size
3. 提取特征和标签
4.模型训练与模型预测、保存模型
5.模型评分

#!/usr/bin/env python 3.6
#-*- coding:utf-8 -*-
# @File    : V1.py
# @Date    : 2018-11-14
# @Author  : 黑桃
# @整理    : 等到的过去


import pickle
import pandas as pd #数据分析
from pandas import Series,DataFrame
from sklearn.model_selection import train_test_split
import time
from sklearn.externals import joblib
from sklearn.linear_model import LogisticRegression
from sklearn.metrics import f1_score
print("开始......")
t_start = time.time()
path = "E:/MyPython/Machine_learning_GoGoGo/Task1/data_set/"
"""==========================================================================================================
1 读取数据
"""
print("数据预处理")
data = pd.read_csv(path + 'data.csv',encoding='gb18030')

"""
1.1 缺失值用100填充
"""
data=DataFrame(data.fillna(100))


"""
1.2 对reg_preference_for_trad 的处理  【映射】
    nan=0 境外=1 一线=5 二线=2 三线 =3 其他=4
"""
n=set(data['reg_preference_for_trad'])
dic={}
for i,j in enumerate(n):
    dic[j]=i
data['reg_preference_for_trad'] = data['reg_preference_for_trad'].map(dic)


"""
1.3 对source 的处理  【映射】
"""
n=set(data['source'])
dic={}
for i,j in enumerate(n):
    dic[j]=i
data['source'] = data['source'].map(dic)


"""
1.4 对bank_card_no 的处理  【映射】
"""
n=set(data['bank_card_no'])
dic={}
for i,j in enumerate(n):
    dic[j]=i
data['bank_card_no'] = data['bank_card_no'].map(dic)

"""
1.5 对 id_name的处理  【映射】
"""
n=set(data['id_name'])
dic={}
for i,j in enumerate(n):
    dic[j]=i
data['id_name'] = data['id_name'].map(dic)

"""
1.6 对 time 的处理  【删除】
"""
data.drop(["latest_query_time"],axis=1,inplace=True)
data.drop(["loans_latest_time"],axis=1,inplace=True)

# """==========================================================================================================
# 4 time时间归一化 小时
# """
# data['time'] = pd.to_datetime(data['time'])
# time_now = data['time'].apply(lambda x:int((x-datetime(2018,11,14,0,0,0)).seconds/3600))
# data['time']= time_now

"""==========================================================================================================
2 划分训练集和验证集,验证集比例为test_size
"""
print("划分训练集和验证集,验证集比例为test_size")
train, test = train_test_split(data, test_size=0.1, random_state=666)


"""==========================================================================================================
3 提取lable 和特征
"""
y_train= train.status
train.drop(["status"],axis=1,inplace=True)

y_test= test.status
test.drop(["status"],axis=1,inplace=True)
"""==========================================================================================================
5 模型训练
"""
print("模型训练")

lg = LogisticRegression(C=100,dual=True)
lg.fit(train,y_train)
"""
保存模型
"""
print('保存模型')
joblib.dump(lg, path + "lg_120.m")


"""==========================================================================================================
6 模型预测
"""
y_test_pre = lg.predict(test)

"""==========================================================================================================
7 模型评分
"""
score_vali = f1_score(y_test, y_test_pre, average='macro')
print("验证集分数:{}".format(score_vali))


评分结果
在这里插入图片描述

需要改进的地方

  • 交叉验证
  • 网格搜索调参
  • 模型融合
  • 特征工程

猜你喜欢

转载自blog.csdn.net/Heitao5200/article/details/84102292