栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

python可视化学习三(逻辑回归)

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

python可视化学习三(逻辑回归)

############数据探索(利用逻辑回归来探索标签与特征的关系)########
midwest[midwest['area']>0.1]
midwest['category'].value_counts()

分别运行的结果如下:

midwest['c1'] =midwest['category'].apply(lambda x:x[0])
midwest['c2'] =midwest['category'].apply(lambda x:x[1])
midwest['c3'] =midwest['category'].apply(lambda x:x[2])
midwest.head()
#利用的正则化的表达式


##########利用机器学习算法来验证自己的想法###########
#######处理数据集,将最后三个字母转化为数字#########
#######可以采用独热编码#############################
from sklearn.preprocessing import OrdinalEncoder as OE
data=midwest.copy()
data.head()
data.iloc[:,-3:].head()
data.head()
###将字母转化为数字###
data.iloc[:,-3:] =OE().fit_transform(data.iloc[:,-3:])
data.iloc[:,-3:].head()



这是将字母转化为数字后的
data.info()#查看数据类型

#去掉所有object对象的列,保留数字的列
data = data.loc[:,data.dtypes.values !='O']
###将所有类型的数转化为浮点数
for i in range(data.loc[:,data.dtypes.values =='int64'].shape[1]):
    data.loc[i,data.dtypes.values=='int64']= data.loc[i,data.dtypes.values =='int64'].apply(lambda x:float(x))
data.info()

x=data.iloc[:,1:-3]  ###特征矩阵
x.head()

y=data.iloc[:,-3:]## 所有行的,列是倒数3列的
y.head()

##############分测试集与训练集###########
from sklearn.model_selection import train_test_split as TTS

Xtrain,Xtest,ytrain,ytest = TTS(x,y,test_size=0.3,random_state=420)
##############恢复索引################### 
for i in [Xtrain,Xtest,ytrain,ytest]:
    i.index =range(i.shape[0])
##############标准化###################
###iloc的学习####
Xtrain.iloc[:,[0,2,4,6]]#######取出0,2,4,6的列

[*range(23),-1] 

Xtrain.iloc[:,[*range(23),-1]].head()  #0到22列以及最后一列跳过中间的一列

###标准化数据集####
from sklearn.preprocessing import StandardScaler
ss = StandardScaler().fit(Xtrain.iloc[:,[*range(23),-1]].head()) #以训练集为标准的均值与方差
xtrain_ =Xtrain.copy()
xtest_ = Xtest.copy()
xtrain_.iloc[:,[*range(23),-1]]=ss.transform(Xtrain.iloc[:,[*range(23),-1]])
xtest_.iloc[:,[*range(23),-1]]=ss.transform(Xtest.iloc[:,[*range(23),-1]])
xtrain_.head()

##############分测试集与训练集###########
from sklearn.model_selection import train_test_split as TTS

Xtrain,Xtest,ytrain,ytest = TTS(x,y,test_size=0.3,random_state=420)
##############恢复索引################### 
for i in [Xtrain,Xtest,ytrain,ytest]:
    i.index =range(i.shape[0])
##############标准化###################
from sklearn.preprocessing import StandardScaler
ss = StandardScaler().fit(Xtrain.iloc[:,[*range(23),-1]].head()) #以训练集为标准的均值与方差
xtrain_ =Xtrain.copy()
xtest_ = Xtest.copy()
xtrain_.iloc[:,[*range(23),-1]]=ss.transform(Xtrain.iloc[:,[*range(23),-1]])
xtest_.iloc[:,[*range(23),-1]]=ss.transform(Xtest.iloc[:,[*range(23),-1]])
######################使用逻辑回归进行建模##################
from sklearn.linear_model import LogisticRegression as logiR
#import pandas as pd 
for i in range(3):
    logi = logiR(solver='newton-cg',max_iter=100**20,multi_class='multinomial').fit(xtrain_,ytrain.iloc[:,i].ravel()) 
    print(y.columns[i])
    print('tTrain:{}'.format(logi.score(xtrain_,ytrain.iloc[:,i].ravel())))#模型的学习能力,以准确率来衡量
    print('tTest:{}'.format(logi.score(xtrain_,ytrain.iloc[:,i].ravel())))#模型的泛化能力
    coeff = pd.dataframe(logi.coef_).T  #每行是我们的特征,每列是我们的三等类的三个系数(A,L,H)
    if i !=2:
        coeff['mean'] = coeff.iloc[:,: -1].mean(axis=1)
        coeff['name'] = xtrain.columns
        coeff.columns = ['Average','High','Low','mean','name']
    else:
       coeff['name'] = xtrain.columns
       coeff.columns = ['Coef','mean']
    print(coeff.sort_values(by='mean',ascending=False).head())#根据均值进行降序排列
    print('t')
logi.coef_.shape  ###

进行绘图

###丰富我们的图像
###预设图像的各种属性#####
large = 22 ;med = 16 ; small =12;
params = {'axes.titlesize':large, #子图上标题的大小
         'legend.fontsiz':med,   #图列的字体的大小
          'figure.figsize':(16,10), #图像的画布的大小
          'axes.labelsize': med,  #标签的字体大小
          'xtick.labelsize': med,   #x轴上标尺的字体的大小
          'ytick.labelsize': med,  #y轴上标尺的字体的大小
         'figure.titlesize': large   #整个画布的标题字体大小
         }


#plt.rcParams.update(params)  #设置各种各样的默认属性
#plt.style.use('seaborn-whitegird')#设定各种风格有很多属性
sns.set_style('white')#设定背景风格
###准备标签和颜色列表
categories = np.unique(midwest['category'])
colors=[plt.cm.tab10(i/float(len(categories)-1))for i in range (len(categories))]
##########建立画布
plt.figure( figsize=(16,10),  #绘图尺寸
             dpi=80,          #图像的分辩率
            facecolor ='w',  #图像的背景颜色,设置为白色,默认为白色
            edgecolor ='k' #图像的背景颜色,设置为黑色,默认为黑色

)
##############循坏绘图
for i ,category in enumerate(categories):
    plt.scatter('area','poptotal',
                data=midwest.loc[midwest.category==category,:],
               s=20,c=np.array(colors[i]).reshape(1,-1),label=str(category))
    
#注意到这里的数据或去方式和我们之前绘图的不一样了吗?
#我们不仅可以输入横纵坐标,也可以输入横纵坐标的名字,然后使用data这个参数来传入全数据集
#我们不仅可以循坏i,还可以对i和category一同循坏
#############对图像进行装饰############
#plt.gca() 获取当前的子图,如果当前没有子图的话,就帮我创建一个新的子图
plt.gca().set(xlim=(0.0,0.12),ylim=(0,80000))#控制横纵坐标的范围
plt.xticks(fontsize=12)  #坐标轴上的尺寸的字的大小
plt.yticks(fontsize=12)
plt.ylabel('Population',fontsize=12)#坐标轴上的标题和字体的大小
plt.xlabel('Area',fontsize=22)
plt.title('scatterplot of Midwest Area vs Population',fontsize =22)#整个图像的标题和字体的大小
plt.legend(fontsize =12)  #图例的字体的大小


###圈出高学历,地贫困的地方
plt.scatter( 'area','poptotal',
             data=midwest.loc[midwest.category=='HLU',:],
             s=300,
             facecolors ='None', #点的填从颜色,为none的时候,表示点是透明的
             edgecolors ='red',  #点的边框呈现的是红色的
             label = 'Selected'
             
             )
####低学历,很贫困的地方
plt.scatter( 'area','poptotal',
             data=midwest.loc[midwest.category=='LHR',:],
             s=300,
             facecolors ='None', #点的填从颜色,为none的时候,表示点是透明的
             edgecolors ='blue',  #点的边框呈现的是红色的
             label = 'Selected'
             )
####学历低,但很富有的地方
plt.scatter( 'area','poptotal',
             data=midwest.loc[midwest.category=='HHR',:],
             s=300,
             facecolors ='None', #点的填从颜色,为none的时候,表示点是透明的
             edgecolors ='green',  #点的边框呈现的是红色的
             label = 'Selected'
             )
####图形的装饰#########
plt.gca().set(xlim=(0.0,0.12),ylim=(0,80000))#控制横纵坐标的范围
plt.xticks(fontsize=12)  #坐标轴上的尺寸的字的大小
plt.yticks(fontsize=12)
plt.ylabel('Population',fontsize=12)#坐标轴上的标题和字体的大小
plt.xlabel('Area',fontsize=22)
plt.title('scatterplot of Midwest Area vs Population',fontsize =22)#整个图像的标题和字体的大小
plt.legend(fontsize =12)  #图例的字体的大小
plt.show()

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/580802.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号