机器学习之数据分析

熟话说,'巧妇难为无米之炊',数据和特征就是'米',模型和算法则是'巧妇',没有充足的数据、合适的特征,再强大的模型结构也无法得到满意的输出,为了更好的

大家好,又见面了,我是全栈君,今天给大家准备了Idea注册码。

熟话说,’巧妇难为无米之炊’,数据和特征就是’米’,模型和算法则是’巧妇’,没有充足的数据、合适的特征,再强大的模型结构也无法得到满意的输出,为了更好的使用模型,必须先对数据有个正确的认识,本博将对数据分析的三种方法(描述性统计,数据可视化和相关性系数)进行总结,为数据预处理准备

1. sklearn数据集类型

- 自带的小数据集:sklearn.datasets.load_<name>

    鸢尾花数据集:load_iris()

    乳腺癌数据集:load_breast_cancer()

    手写数字集:load_digits()
    
- 可在线下载的数据集:sklearn.datasets.fetch_<name>

- 计算机生成的数据集:sklearn.datasets.make_<name>

- svmlight/libsvm格式的数据集:sklearn.datasets.load_svmlight_file()

- 从买了data.org在线下载获取数据集:sklearn.datasets.fetch_mldata()

2. 数据分析

下面将以房价数据为例进行说明这个数据分析过程

2.1 获取数据

import pandas as pd
housing = pd.read_csv('./datasets/housing/housing.csv')

2.2 查看列标信息

print(housing.columns)
Index(['longitude', 'latitude', 'housing_median_age', 'total_rooms',
       'total_bedrooms', 'population', 'households', 'median_income',
       'median_house_value', 'ocean_proximity'],
      dtype='object')

2.3 查看数据集前5行信息

print(housing.head())
   longitude  latitude  housing_median_age  total_rooms  total_bedrooms  \
0    -122.23     37.88                41.0        880.0           129.0   
1    -122.22     37.86                21.0       7099.0          1106.0   
2    -122.24     37.85                52.0       1467.0           190.0   
3    -122.25     37.85                52.0       1274.0           235.0   
4    -122.25     37.85                52.0       1627.0           280.0   

   population  households  median_income  median_house_value ocean_proximity  
0       322.0       126.0         8.3252            452600.0        NEAR BAY  
1      2401.0      1138.0         8.3014            358500.0        NEAR BAY  
2       496.0       177.0         7.2574            352100.0        NEAR BAY  
3       558.0       219.0         5.6431            341300.0        NEAR BAY  
4       565.0       259.0         3.8462            342200.0        NEAR BAY  

2.4 获取数据集的简单描述

print(housing.info())
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 20640 entries, 0 to 20639
Data columns (total 10 columns):
longitude             20640 non-null float64
latitude              20640 non-null float64
housing_median_age    20640 non-null float64
total_rooms           20640 non-null float64
total_bedrooms        20433 non-null float64
population            20640 non-null float64
households            20640 non-null float64
median_income         20640 non-null float64
median_house_value    20640 non-null float64
ocean_proximity       20640 non-null object
dtypes: float64(9), object(1)
memory usage: 1.6+ MB
None

注意:total_bedrooms这个属性只有20433个非空值,这意味着又207个区域缺失这个特征,所有的属性的字段都是float,除了ocean_proximity,它的类型是object,因此它可以是任何类型的Python对象

2.5 查看分类标签种类和数量

print(housing['ocean_proximity'].value_counts())  #查看属性类别
<1H OCEAN     9136
INLAND        6551
NEAR OCEAN    2658
NEAR BAY      2290
ISLAND           5
Name: ocean_proximity, dtype: int64

2.6 查看数据集统计描述信息

print(housing.describe()) #查看描述性信息
          longitude      latitude  housing_median_age   total_rooms  \
count  20640.000000  20640.000000        20640.000000  20640.000000   
mean    -119.569704     35.631861           28.639486   2635.763081   
std        2.003532      2.135952           12.585558   2181.615252   
min     -124.350000     32.540000            1.000000      2.000000   
25%     -121.800000     33.930000           18.000000   1447.750000   
50%     -118.490000     34.260000           29.000000   2127.000000   
75%     -118.010000     37.710000           37.000000   3148.000000   
max     -114.310000     41.950000           52.000000  39320.000000   

       total_bedrooms    population    households  median_income  \
count    20433.000000  20640.000000  20640.000000   20640.000000   
mean       537.870553   1425.476744    499.539680       3.870671   
std        421.385070   1132.462122    382.329753       1.899822   
min          1.000000      3.000000      1.000000       0.499900   
25%        296.000000    787.000000    280.000000       2.563400   
50%        435.000000   1166.000000    409.000000       3.534800   
75%        647.000000   1725.000000    605.000000       4.743250   
max       6445.000000  35682.000000   6082.000000      15.000100   

       median_house_value  
count        20640.000000  
mean        206855.816909  
std         115395.615874  
min          14999.000000  
25%         119600.000000  
50%         179700.000000  
75%         264725.000000  
max         500001.000000  

3. 数据可视化

数据可视化可以通过各种图表显示,如直方图、点图、箱体图、QQ图,下面以longitude属性为例

3.1 点图

import matplotlib.pyplot as plt
plt.plot(housing.index,housing['longitude'],'r.')
plt.show()

机器学习之数据分析

3.2 绘制直方图

plt.hist(housing['longitude'],bins=20)
plt.show()

机器学习之数据分析

3.3 将地理数据可视化

housing.plot(kind='scatter',x='longitude',y='latitude')
<matplotlib.axes._subplots.AxesSubplot at 0x206138f5fd0>

机器学习之数据分析

housing.plot(kind='scatter',x='longitude',y='latitude',alpha=0.1)
<matplotlib.axes._subplots.AxesSubplot at 0x2061395bc88>

机器学习之数据分析

接下来看看房价,每个圆的半径大小代表了每个地区的人口数量(选项s),颜色代表价格(选项c),使用jet的预定义颜色表(选项cmap)来进行可视化,颜色范围从蓝到红(从低到高)

housing.plot(kind='scatter',x='longitude',y='latitude',alpha=0.4,s=housing['population']/1000,
            label='population',c='median_house_value',cmap=plt.get_cmap('jet'),colorbar=True)
plt.legend()
<matplotlib.legend.Legend at 0x206139bdc88>

机器学习之数据分析

4 查看特征相关性

由于数据集不大,可以使用corr()轻松计算除每队属性之间标准相关系数,也称为皮尔逊相关系数

皮尔逊相关系数公式:

\[p_(X,Y) = \frac{cov(X,Y)}{\sigma_X \sigma_Y} = \frac{\sum_{i=1}^n(x_i – \mu)(y_i-\mu)}{\sqrt{\sum_{i=1}^n{(x_i-\mu)}^2\sqrt{\sum_{i=1}^n{(y_i-\mu)}^2}}} \]

计算相关性系数时还可以使用欧式距离和余弦相似度,但需要明确它们的使用场景,欧式距离主要关注数值之间的差异,当相对于平均水平偏离度很大时,不能很好的反映真实的相似度,余弦相似度更偏重于维度之间的差异

corr_matrix = housing.corr()
print(corr_matrix['median_house_value'].sort_values(ascending=False))
median_house_value    1.000000
median_income         0.688075
total_rooms           0.134153
housing_median_age    0.105623
households            0.065843
total_bedrooms        0.049686
population           -0.024650
longitude            -0.045967
latitude             -0.144160
Name: median_house_value, dtype: float64

相关系数的范围从-1变换到1,越接近1,表示越强的正相关,越接近-1,表示越强烈的负相关,系数靠近0时说明二者之间没有线性相关性。

\({\color {red} {注意,相关系数仅测量线性相关性,所以它有可能彻底遗漏非线性相关性}}\)

附:变异值度量

极差

极差 = 最大值 – 最小值

样本方差

n个测量值\(x_1,x_2,…,x_n\)的样本方差定义为$$s^2 = \frac{1}{n-1}\sum_{i=1}^n{(x_i – \mu)}^2$$

注意:有偏方差和无偏方差的区别

标准方差

\[s = \sqrt{s^2} \]

解释标准差的两个有效法则:经验法和切比雪夫法则

经验法则

若一个数据集有近似丘形的对称分布,则可以用以下的经验法则描述数据集

(1)大约68%的测量值位于均值的1个标准差范围内(\(即对于样本在区间\mu\pm s范围内,对于总体在区间\mu\pm \sigma范围内)\)

(2)大约95%的测量值位于均值的2个标准差范围内(\(即对于样本在区间\mu\pm 2s范围内,对于总体在区间\mu\pm 2\sigma范围内)\)

(3)几乎所有测量值位于均值的2个标准差范围内(\(即对于样本在区间\mu\pm 3s范围内,对于总体在区间\mu\pm 3\sigma范围内)\)

切比雪夫法则

对于任一数据集,无论数据的频数是什么形状

(1)可能很少的测量值落在均值的1个标准差范围内(\(即对于样本在区间\mu\pm s范围内,对于总体在区间\mu\pm \sigma范围内)\)

(2)至少有\(\frac{3}{4}\)的测量值落在均值的2个标准差范围内(\(即对于样本在区间\mu\pm 2s范围内,对于总体在区间\mu\pm 2\sigma范围内)\)

(3)至少有\(\frac{8}{9}\)的测量值落在均值的3个标准差范围内(\(即对于样本在区间\mu\pm 3s范围内,对于总体在区间\mu\pm 3\sigma范围内)\)

(4)通常,对于任意大于1的数k,至少有\(1-\frac{1}{k^2}\)的测量值落在均值的k个标准差范围内

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/120019.html原文链接:https://javaforall.net

赞 (0)
全栈程序员-站长的头像全栈程序员-站长

相关推荐

  • cnn程序流程图_深度学习(一)——CNN算法流程

    cnn程序流程图_深度学习(一)——CNN算法流程深度学习(一)——CNN(卷积神经网络)算法流程0引言20世纪60年代,Hubel和Wiesel在研究猫脑皮层中用于局部敏感和方向选择的神经元时发现其独特的网络结构可以有效地降低反馈神经网络的复杂性,继而提出了卷积神经网络(ConvolutionalNeuralNetworks-简称CNN)。现在,CNN已经成为众多科学领域的研究热点之一,特别是在模式分类领域,由于该网络避免了对图像的复杂前…

    2022年9月6日
  • mysql截取_mysql截取字符串的方法[通俗易懂]

    mysql截取_mysql截取字符串的方法[通俗易懂]1、从左开始截取字符串left(str,length)说明:left(被截取字段,截取长度)例:selectleft(content,200)asabstractfrommy_content_t2、从右开始截取字符串right(str,length)说明:right(被截取字段,截取长度)例:selectright(content,200)asabstractfrommy_…

    2022年6月11日
  • SpringBoot集成Redis,并自定义对象序列化

    SpringBoot集成Redis,并自定义对象序列化SpringBoot项目使用redis非常简单,pom里面引入redis的场景启动器,在启动类上加@EnableCaching注解,项目启动会自动匹配上redis,这样项目中就可以愉快地使用了,使用方法:要么使用@Cacheable一类的注解自动缓存,要么使用RedisTemplate手动缓存。(前提是你的本机或者是远程主机要先搭好redis环境)虽然SpringBoot好用,但这里也有好多…

    2022年9月22日
  • ftp 命令详解_ftp连接命令

    ftp 命令详解_ftp连接命令1、ftp&gt;!从ftp子系统退出到外壳2、ftp&gt;?显示ftp命令说明,与help相同格式:?[command]说明:[command]指定需要帮助的命令名称,如果没有指定command,ftp将显示全部命令的列表3、ftp&gt;append使用当前文件类型设置,将本地文件附加到远程计算机的文件格式:appendlocal-file[remote…

    2022年9月21日
  • Java不可重入锁和可重入锁理解[通俗易懂]

    Java不可重入锁和可重入锁理解[通俗易懂]最近正在阅读JavaReentrantLock源码,始终对可重入和不可重入概念理解不透彻,进行学习后记录在这里。基础知识Java多线程的wait()方法和notify()方法这两个方法是成对出现和使用的,要执行这两个方法,有一个前提就是,当前线程必须获其对象的monitor(俗称“锁”),否则会抛出IllegalMonitorStateException异常,所以这两个方法必须在同步…

    2022年6月26日
  • NFS固定端口配置

    NFS固定端口配置NFS固定端口的配置一、环境介绍二、配置步骤1、安装nfs工具2、创建共享目录3、修改nfs配置文件,指定固定的端口4、重启相关服务并检查相应端口是否存在一、环境介绍1、内网环境,使用NFS作为存储;2、需开通工作节点服务器访问存储服务器的NFS的网络策略,所以需要将端口固定;二、配置步骤1、安装nfs工具yuminstall-yrpcbindnfs-utils2、创建共享目录mkdir/data/hoschmod777/data/hos/编辑/etc/exports

    2022年6月27日

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号