car-evaluation/逻辑回归

一、任务背景

本数据集来自UCI,描述的是对一种车型的评价,车子具有 buying,maint,doors,persons,lug_boot and safety六种属性,而车子的好坏分为uncc,ucc,good and vgood四种。我们这次机器学习的目的就是训练一种模型能够自动评价一款车型的好坏。

二、获取数据

#获取数据
data = pd.read_excel('car_data1.xlsx')
data.head()#预览一下数据
Unnamed: 0buyingmaintdoorspersonslug_bootsafetyclass
00vhighvhigh22smalllowunacc
11vhighvhigh22smallmedunacc
22vhighvhigh22smallhighunacc
33vhighvhigh22medlowunacc
44vhighvhigh22medmedunacc
#检查每种属性的种类
for i in data.columns:
    print(data[i].unique(),"\t",data[i].nunique())
[   0    1    2 ... 1725 1726 1727] 	 1728
['vhigh' 'high' 'med' 'low'] 	 4
['vhigh' 'high' 'med' 'low'] 	 4
['2' '3' '4' '5more'] 	 4
['2' '4' 'more'] 	 3
['small' 'med' 'big'] 	 3
['low' 'med' 'high'] 	 3
['unacc' 'acc' 'vgood' 'good'] 	 4
sns.countplot(data['class'])
<AxesSubplot:xlabel='class', ylabel='count'>

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-9PYML1G8-1610414718402)(output_5_2.png)]
从表格中可以看到标签分类是极度不平均的
接下来进行相关性分析

fig=plt.figure(figsize=(10,6))
sns.heatmap(data.corr(),annot=True)
<AxesSubplot:>

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-fwQ5If4q-1610414718405)(output_10_1.png)]

从表格中可以看到基本上每一种属性和分配标准都属于弱相关性

三、数据处理

#将字符串转换为整数型,数据处理
from sklearn.preprocessing import LabelEncoder
le=LabelEncoder()
for i in data.columns:
    data[i]=le.fit_transform(data[i])
data
Unnamed: 0buyingmaintdoorspersonslug_bootsafetyclass
003300212
113300222
223300202
333300112
443300122
...........................
172317231132121
172417241132103
172517251132012
172617261132021
172717271132003

1728 rows × 8 columns

#通过皮尔逊相关系数可以知道,所有属性和class的相关性是比较弱的
X=data[data.columns[:-1]]
y=data['class']#标签
X
Unnamed: 0buyingmaintdoorspersonslug_bootsafety
00330021
11330022
22330020
33330011
44330012
........................
17231723113212
17241724113210
17251725113201
17261726113202
17271727113200

1728 rows × 7 columns

四、模型训练

#用sklearn自带的区分数据集和测试集
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=10)#三七开
#选择逻辑回归进行训练模型
from sklearn.linear_model import LogisticRegression
#from LogisticRegression import LogisticRegression
from sklearn.model_selection import train_test_split,cross_val_score
from sklearn.metrics import classification_report, confusion_matrix
from sklearn.neighbors import KNeighborsClassifier
from sklearn.model_selection import GridSearchCV
logreg=LogisticRegression(solver='newton-cg',multi_class='multinomial')
logreg.fit(X_train,y_train)
LogisticRegression(multi_class='multinomial', solver='newton-cg')
pred=logreg.predict(X_test)
logreg.score(X_test,y_test)
0.7225433526011561

五、结论

#或许逻辑回归并不是一个非常高的方法
from sklearn.model_selection import learning_curve
lc=learning_curve(logreg,X_train,y_train,cv=10,n_jobs=-1)
size=lc[0]
train_score=[lc[1][i].mean() for i in range (0,5)]
test_score=[lc[2][i].mean() for i in range (0,5)]
fig=plt.figure(figsize=(12,8))
plt.plot(size,train_score)
plt.plot(size,test_score)
[<matplotlib.lines.Line2D at 0x1fd0bb8dd00>]

从下面的学习曲线可以看到,使用逻辑回归的情况下,当数据量越来越大的时候,预测的精确度是在不断减小的。因此说明后续的课题研究应当着眼于尝试更好的机器学习方法来训练一个更好的分类模型。

六、代码连接:

链接:https://pan.baidu.com/s/1DqkpRh_ZvK0W3cZVxJbEQA
提取码:1qly

  • 5
    点赞
  • 49
    收藏
    觉得还不错? 一键收藏
  • 6
    评论
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值