机器学习实战第二版---第一节:数据预处理(2)

本文探讨了如何通过查看特征相关性、清理缺失值、处理文本数据和特征缩放来优化机器学习项目的数据预处理步骤。包括使用散点图展示属性间的关系,通过`corr()`计算相关矩阵,以及应用中位数填充、独热编码和标准化等技术来提升数据质量。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

机器学习实战第二版—第一节:数据预处理(2)

只要分为以下几点:
1.查看几个特征之间的相关性

'''
    housing.plot(kind = 'scatter',x='longitude',y='latitude',alpha = 0.1,s= housing['population']/100,label='population',figsize=(10,7),
                 c='median_house_value',cmap=plt.get_cmap('jet'),colorbar=True,)  #scatter 散点图   alpha = 0.1显示出高密度点的位置
    # s生成每个点的大小,每个数据点生成控制大小的数组 size#c 生成每个点的颜色大小,每个数据点生成控制颜色的数组 colour
    #使用一个名为jet的预定义颜色表(选项cmap)来进行可视化,颜色范围从蓝色到红色

    plt.legend()
    plt.show()
    '''
    '''
    由于数据集不大,可以使用corr()计算每队属性的标准相关关系  相关矩阵
    '''
    # corr_matrix = housing.corr()#相关矩阵
    # print(corr_matrix['median_house_value'].sort_values(ascending=False)) #查看每组与房价信息的相关性  可以根据这个提取特征 但遗漏了非线性特征


    '''
    pandas 的scatter_matrix 也可以求出其他数值的属性相关性  这里显示了4个属性 会出现4**2的图  可以明显看出收入和价值成线性相关
    '''

    # attribute = ['median_house_value', 'median_income', 'total_rooms', 'housing_median_age']
    # scatter_matrix(housing[attribute], figsize=(12, 8))
    # plt.show()
    '''
    放大看 看出收入和价值成线性相关
    '''

    # housing.plot(kind = 'scatter',x='median_income',y='median_house_value',alpha = 0.1)
    # plt.show()

    '''
    重尾:中值的右边拖的很长,而左边较短。这种分布会增加一些机器学习算法在进行模式识别时的难度。我们需要之后转化这些属性,尽量量它们的分布转为钟形分布
    可以计算其对数
    '''

2.数据清理–缺失值处理:干掉那一行,那一列,将缺失值用中值替代

########################################################### 数据清理
    '''
    '''
    处理缺失值
    1.housing.dropna(subset=['total_bedrooms'])  #删除某些空的数据
    2.housing.drop('total_bedrooms',axis=1) #整列干掉
    3.median=housing['total_bedrooms'].median()#将空的值转为话为平均值
    housing.fillna(median,inplace=True)
    
    '''
    '''
     #处理缺失值直接上轮子
    imputer = SimpleImputer(strategy='median')  #要是村数字才能算    ocean_proximity时文本
    housing_num = housing.drop('ocean_proximity',axis=1)
    imputer.fit(housing_num) #每列的中位数  为了防止在启动程序时不知道是否存在空的,索性之前全加进去
    # print(imputer.statistics_,housing_num.median().values)
    X = imputer.transform(housing_num)
    housing_tr = pd.DataFrame(X,columns=housing_num.columns,index=housing_num.index)  #放回原来的数据 dataframe
    
    '''

3.文本数据分类转换–用轮子 独热编码

'''
    文本数据分类转换
    
    #处理文本  分类的文本转文字
    housing_cat = housing[['ocean_proximity']]
    ordinal_encoder = OrdinalEncoder()
    housing_cat_ordinal = ordinal_encoder.fit_transform(housing_cat)
    print(housing_cat_ordinal,ordinal_encoder.categories_)

    ####独热编码
    cat_encoder  = OneHotEncoder()
    housing_cat_lhot = cat_encoder.fit_transform(housing_cat)
    print(housing_cat_lhot)  #输出的是一个稀疏矩阵  toarry可以形成一个numpy
    
    '''

4.数据特征缩放—归一化和标准化

对测试集进行特征缩放时采用相同的的方法,不同的是,测试集所使用的均值,标准差是训练集的均值和标准差。

全部代码:

import numpy as np
import pandas as pd
import os
import matplotlib.pyplot as plt
from pandas.plotting import scatter_matrix
from zlib import crc32
from sklearn.model_selection import train_test_split
from sklearn.impute import SimpleImputer
from sklearn.preprocessing import OrdinalEncoder
from sklearn.preprocessing import OneHotEncoder
def loaddata(path):
    '''
    下载数据集
    :param path:
    :return:
    '''
    csvpath=os.path.join(path,'housing.csv')
    return pd.read_csv(csvpath)





if __name__ == "__main__":
    housingdata = loaddata('./')
    housing = housingdata.copy() #拷贝数据
    # print(housingdata.head(4))  #head 默认查看前五行
    # print(housingdata.describe()) #查看某种属性下的摘要 数据大小,平均值,中位数 std标准差 分位数等。。。
    # print(housingdata.info())#info也是pandas的方法  这个数据集查看简介
    # print(housingdata['count'].value_counts())  #观察到object下是分类的标签 ==查看某列的类型的值


    '''
    housing.plot(kind = 'scatter',x='longitude',y='latitude',alpha = 0.1,s= housing['population']/100,label='population',figsize=(10,7),
                 c='median_house_value',cmap=plt.get_cmap('jet'),colorbar=True,)  #scatter 散点图   alpha = 0.1显示出高密度点的位置
    # s生成每个点的大小,每个数据点生成控制大小的数组 size#c 生成每个点的颜色大小,每个数据点生成控制颜色的数组 colour
    #使用一个名为jet的预定义颜色表(选项cmap)来进行可视化,颜色范围从蓝色到红色

    plt.legend()
    plt.show()
    '''
    '''
    由于数据集不大,可以使用corr()计算每队属性的标准相关关系  相关矩阵
    '''
    # corr_matrix = housing.corr()#相关矩阵
    # print(corr_matrix['median_house_value'].sort_values(ascending=False)) #查看每组与房价信息的相关性  可以根据这个提取特征 但遗漏了非线性特征


    '''
    pandas 的scatter_matrix 也可以求出其他数值的属性相关性  这里显示了4个属性 会出现4**2的图  可以明显看出收入和价值成线性相关
    '''

    # attribute = ['median_house_value', 'median_income', 'total_rooms', 'housing_median_age']
    # scatter_matrix(housing[attribute], figsize=(12, 8))
    # plt.show()
    '''
    放大看 看出收入和价值成线性相关
    '''

    # housing.plot(kind = 'scatter',x='median_income',y='median_house_value',alpha = 0.1)
    # plt.show()

    '''
    重尾:中值的右边拖的很长,而左边较短。这种分布会增加一些机器学习算法在进行模式识别时的难度。我们需要之后转化这些属性,尽量量它们的分布转为钟形分布
    可以计算其对数
    '''

    '''
   ########################################################### 数据清理
    '''
    '''
    处理缺失值
    1.housing.dropna(subset=['total_bedrooms'])  #删除某些空的数据
    2.housing.drop('total_bedrooms',axis=1) #整列干掉
    3.median=housing['total_bedrooms'].median()#将空的值转为话为平均值
    housing.fillna(median,inplace=True)
    
    '''
    '''
     #处理缺失值直接上轮子
    imputer = SimpleImputer(strategy='median')  #要是村数字才能算    ocean_proximity时文本
    housing_num = housing.drop('ocean_proximity',axis=1)
    imputer.fit(housing_num) #每列的中位数  为了防止在启动程序时不知道是否存在空的,索性之前全加进去
    # print(imputer.statistics_,housing_num.median().values)
    X = imputer.transform(housing_num)
    housing_tr = pd.DataFrame(X,columns=housing_num.columns,index=housing_num.index)  #放回原来的数据 dataframe
    
    '''

    '''
    文本数据分类转换
    
    #处理文本  分类的文本转文字
    housing_cat = housing[['ocean_proximity']]
    ordinal_encoder = OrdinalEncoder()
    housing_cat_ordinal = ordinal_encoder.fit_transform(housing_cat)
    print(housing_cat_ordinal,ordinal_encoder.categories_)

    ####独热编码
    cat_encoder  = OneHotEncoder()
    housing_cat_lhot = cat_encoder.fit_transform(housing_cat)
    print(housing_cat_lhot)  #输出的是一个稀疏矩阵  toarry可以形成一个numpy
    
    '''
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值