跟李沐学AI——实用机器学习(入门版)

news2024/11/22 5:12:05

机器学习目录

2.1 探索性数据分析
2.2 数据清理
2.3 数据变换
2.4 特征工程
2.5 数据科学家的日常

Stanford University Practical machine learning

2.1 探索性数据分析

​ 对目标的ftr数据进行处理,针对不同的信息做出不同的图形

输出数据集的行数和列数以及前十行元素

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
from IPython import display
display.set_matplotlib_formats('svg')

def print_line():
    print('-' * 200)


#设置显示行数
np.set_printoptions(threshold=np.inf) # np.inf表示正无穷

    #如果报错,请安装 pyarrow
pd.set_option('display.max_rows',None)	#取消控制台输出行限制
pd.set_option('display.max_columns',None)	#取消控制台输出列限制
pd.set_option('display.width',50000)	#增加控制台输出每行的宽度


data = pd.read_feather('DataSet/house_sales.ftr')
    #Let's check the data shape and the first a few examples
print(data.shape)   #(行数,列数)    shape[0]是行数 shape[1]是列数
print(data.head())  #前n行数据,默认前5行
print_line()

控制台输出

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-wD7SyZPM-1682338484127)(LiMu.assets/image-20230423081824914.png)]

删除百分之三十数据为空的列

    #Warning: drop will delete data
    #We drop columns that at least 30% values are null to simplify our EDA.
null_sum = data.isnull().sum()
print(data.columns[null_sum < len(data) * 0.3]) # columns will keep

谨慎运行,这个会删除数据集中的数据

控制台打印数据集的数据类型

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
from IPython import display
display.set_matplotlib_formats('svg')

def print_line():
    print('-' * 200)

#设置显示行数
np.set_printoptions(threshold=np.inf) # np.inf表示正无穷

    #如果报错,请安装 pyarrow
pd.set_option('display.max_rows',None)	#取消控制台输出行限制
pd.set_option('display.max_columns',None)	#取消控制台输出列限制
pd.set_option('display.width',50000)	#增加控制台输出每行的宽度

data = pd.read_feather('..\DataSet\house_sales.ftr')

    #Next we check the data types
print(data.dtypes)
print_line()

控制台输出

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-o30n7qvm-1682338484129)(LiMu.assets/image-20230423090558793.png)]

我们可以看到很多数据的数据类型是不正常的,这里我们对部分数据做数据类型的转换

对部分数据的数据类型进行转换操作

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
from IPython import display
display.set_matplotlib_formats('svg')

def print_line():
    print('-' * 200)

#设置显示行数
np.set_printoptions(threshold=np.inf) # np.inf表示正无穷

    #如果报错,请安装 pyarrow
pd.set_option('display.max_rows',None)#取消行限制
pd.set_option('display.max_columns',None)#取消列限制
pd.set_option('display.width',50000)#增加每行的宽度

data = pd.read_feather('..\DataSet\house_sales.ftr')

    #Convert currency from string format such as $1,000,000 to float.
currency = ['Sold Price', 'Listed Price', 'Tax assessed value', 'Annual tax amount']
for c in currency:
    data[c] = data[c].replace(
        r'[$,-]', '', regex=True).replace(  #三个符号转成空,空字符串转nan
        r'^\s*$', np.nan, regex=True).astype(float)

    #Also convert areas from string format such as 1000 sqft and 1 Acres to float as well.
areas = ['Total interior livable area', 'Lot size']
for c in areas:
    acres = data[c].str.contains('Acres') == True
    col = data[c].replace(r'\b sqft\b|\b Acres\b|\b,\b','', regex=True).astype(float)
    col[acres] *= 43560
    data[c] = col

    #Next we check the data types
print(data.dtypes)
print_line()

控制台输出

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ZV0lE3RN-1682338484130)(LiMu.assets/image-20230423091907691.png)]

分析数值类型的数据信息

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
from IPython import display
display.set_matplotlib_formats('svg')

def print_line():
    print('-' * 200)

#设置显示行数
np.set_printoptions(threshold=np.inf) # np.inf表示正无穷

    #如果报错,请安装 pyarrow
pd.set_option('display.max_rows',None)#取消行限制
pd.set_option('display.max_columns',None)#取消列限制
pd.set_option('display.width',50000)#增加每行的宽度

data = pd.read_feather('..\DataSet\house_sales.ftr')

    #Convert currency from string format such as $1,000,000 to float.
currency = ['Sold Price', 'Listed Price', 'Tax assessed value', 'Annual tax amount']
for c in currency:
    data[c] = data[c].replace(
        r'[$,-]', '', regex=True).replace(  #三个符号转成空,空字符串转nan
        r'^\s*$', np.nan, regex=True).astype(float)

    #Also convert areas from string format such as 1000 sqft and 1 Acres to float as well.
areas = ['Total interior livable area', 'Lot size']
for c in areas:
    acres = data[c].str.contains('Acres') == True
    col = data[c].replace(r'\b sqft\b|\b Acres\b|\b,\b','', regex=True).astype(float)
    col[acres] *= 43560
    data[c] = col

    #Now we can check values of the numerical columns. You could see the min and max values for several columns do not make sense.
print(data.describe())
print_line()

控制台输出

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-AfspVG1H-1682338484131)(LiMu.assets/image-20230423092921912.png)]

​ 对于其中的一些数据来说,最大值和最小值是没有意义的

筛选掉居住面积小于10或者大于1e4的房子

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
from IPython import display
display.set_matplotlib_formats('svg')

def print_line():
    print('-' * 200)

#设置显示行数
np.set_printoptions(threshold=np.inf) # np.inf表示正无穷

    #如果报错,请安装 pyarrow
pd.set_option('display.max_rows',None)#取消行限制
pd.set_option('display.max_columns',None)#取消列限制
pd.set_option('display.width',50000)#增加每行的宽度

data = pd.read_feather('..\DataSet\house_sales.ftr')

    #Convert currency from string format such as $1,000,000 to float.
currency = ['Sold Price', 'Listed Price', 'Tax assessed value', 'Annual tax amount']
for c in currency:
    data[c] = data[c].replace(
        r'[$,-]', '', regex=True).replace(  #三个符号转成空,空字符串转nan
        r'^\s*$', np.nan, regex=True).astype(float)

    #Also convert areas from string format such as 1000 sqft and 1 Acres to float as well.
areas = ['Total interior livable area', 'Lot size']
for c in areas:
    acres = data[c].str.contains('Acres') == True
    col = data[c].replace(r'\b sqft\b|\b Acres\b|\b,\b','', regex=True).astype(float)
    col[acres] *= 43560
    data[c] = col

    #We filter out houses whose living areas are too small or too hard to simplify the visualization later.
abnormal = (data[areas[1]] < 10) | (data[areas[1]] > 1e4)
data = data[~abnormal]      #把筛选条件取反
print(sum(abnormal))        #输出不符合条件的数量
print_line()

控制台输出

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-gKvm5s9Z-1682338484131)(LiMu.assets/image-20230423094009508.png)]

制作房子价格和数量的直方图

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
from IPython import display
display.set_matplotlib_formats('svg')

def print_line():
    print('-' * 200)

#设置显示行数
np.set_printoptions(threshold=np.inf) # np.inf表示正无穷

    #如果报错,请安装 pyarrow
pd.set_option('display.max_rows',None)#取消行限制
pd.set_option('display.max_columns',None)#取消列限制
pd.set_option('display.width',50000)#增加每行的宽度

data = pd.read_feather('..\DataSet\house_sales.ftr')

    #Convert currency from string format such as $1,000,000 to float.
currency = ['Sold Price', 'Listed Price', 'Tax assessed value', 'Annual tax amount']
for c in currency:
    data[c] = data[c].replace(
        r'[$,-]', '', regex=True).replace(  #三个符号转成空,空字符串转nan
        r'^\s*$', np.nan, regex=True).astype(float)

    #Also convert areas from string format such as 1000 sqft and 1 Acres to float as well.
areas = ['Total interior livable area', 'Lot size']
for c in areas:
    acres = data[c].str.contains('Acres') == True
    col = data[c].replace(r'\b sqft\b|\b Acres\b|\b,\b','', regex=True).astype(float)
    col[acres] *= 43560
    data[c] = col

    #We filter out houses whose living areas are too small or too hard to simplify the visualization later.
abnormal = (data[areas[1]] < 10) | (data[areas[1]] > 1e4)
data = data[~abnormal]      #把筛选条件取反

    #Let's check the histogram of the 'Sold Price', which is the target we want to predict.
ax = sns.histplot(np.log10(data['Sold Price']))
ax.set_xlim([3,8])      #设置图形x轴的长度
ax.set_xticks(range(3, 9))      #列表的元素为图形的ticks的位置
ax.set_xticklabels(['%.0e'%a for a in 10**ax.get_xticks()]);        #X轴的名称
plt.show();

输出图形

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ghbcfiFI-1682338484132)(LiMu.assets/image-20230423100811825.png)]

查询数量最多的二十种房子的类型

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
from IPython import display
display.set_matplotlib_formats('svg')

def print_line():
    print('-' * 200)

#设置显示行数
np.set_printoptions(threshold=np.inf) # np.inf表示正无穷

    #如果报错,请安装 pyarrow
pd.set_option('display.max_rows',None)      #取消行限制
pd.set_option('display.max_columns',None)       #取消列限制
pd.set_option('display.width',50000)        #增加每行的宽度

data = pd.read_feather('..\DataSet\house_sales.ftr')

    #Convert currency from string format such as $1,000,000 to float.
currency = ['Sold Price', 'Listed Price', 'Tax assessed value', 'Annual tax amount']
for c in currency:
    data[c] = data[c].replace(
        r'[$,-]', '', regex=True).replace(  #三个符号转成空,空字符串转nan
        r'^\s*$', np.nan, regex=True).astype(float)

    #Also convert areas from string format such as 1000 sqft and 1 Acres to float as well.
areas = ['Total interior livable area', 'Lot size']
for c in areas:
    acres = data[c].str.contains('Acres') == True
    col = data[c].replace(r'\b sqft\b|\b Acres\b|\b,\b','', regex=True).astype(float)
    col[acres] *= 43560
    data[c] = col

    #We filter out houses whose living areas are too small or too hard to simplify the visualization later.
abnormal = (data[areas[1]] < 10) | (data[areas[1]] > 1e4)
data = data[~abnormal]      #把筛选条件取反

    #A house has different types. Here are the top 20 types:
print(data['Type'].value_counts()[0:20])
print_line()

控制台输出

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-obtuwH72-1682338484132)(LiMu.assets/image-20230423102521950.png)]

制作每种房子价格和密度的关系图

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
from IPython import display
display.set_matplotlib_formats('svg')

def print_line():
    print('-' * 200)

#设置显示行数
np.set_printoptions(threshold=np.inf) # np.inf表示正无穷

    #如果报错,请安装 pyarrow
pd.set_option('display.max_rows',None)      #取消行限制
pd.set_option('display.max_columns',None)       #取消列限制
pd.set_option('display.width',50000)        #增加每行的宽度

data = pd.read_feather('..\DataSet\house_sales.ftr')

    #Convert currency from string format such as $1,000,000 to float.
currency = ['Sold Price', 'Listed Price', 'Tax assessed value', 'Annual tax amount']
for c in currency:
    data[c] = data[c].replace(
        r'[$,-]', '', regex=True).replace(  #三个符号转成空,空字符串转nan
        r'^\s*$', np.nan, regex=True).astype(float)

    #Also convert areas from string format such as 1000 sqft and 1 Acres to float as well.
areas = ['Total interior livable area', 'Lot size']
for c in areas:
    acres = data[c].str.contains('Acres') == True
    col = data[c].replace(r'\b sqft\b|\b Acres\b|\b,\b','', regex=True).astype(float)
    col[acres] *= 43560
    data[c] = col

    #We filter out houses whose living areas are too small or too hard to simplify the visualization later.
abnormal = (data[areas[1]] < 10) | (data[areas[1]] > 1e4)
data = data[~abnormal]      #把筛选条件取反

    #Price density for different house types.
types = data['Type'].isin(['SingleFamily', 'Condo', 'MultiFamily', 'Townhouse'])
sns.displot(pd.DataFrame({'Sold Price':np.log10(data[types]['Sold Price']),
                          'Type':data[types]['Type']}),
            x = 'Sold Price', hue = 'Type', kind='kde')
plt.show()

输出图形

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-JwfLprKD-1682338484133)(LiMu.assets/image-20230423104859102.png)]

制作房子类型和每英尺价格的箱线图

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
from IPython import display
display.set_matplotlib_formats('svg')

def print_line():
    print('-' * 200)

#设置显示行数
np.set_printoptions(threshold=np.inf) # np.inf表示正无穷

    #如果报错,请安装 pyarrow
pd.set_option('display.max_rows',None)      #取消行限制
pd.set_option('display.max_columns',None)       #取消列限制
pd.set_option('display.width',50000)        #增加每行的宽度

data = pd.read_feather('..\DataSet\house_sales.ftr')

    #Convert currency from string format such as $1,000,000 to float.
currency = ['Sold Price', 'Listed Price', 'Tax assessed value', 'Annual tax amount']
for c in currency:
    data[c] = data[c].replace(
        r'[$,-]', '', regex=True).replace(  #三个符号转成空,空字符串转nan
        r'^\s*$', np.nan, regex=True).astype(float)

    #Also convert areas from string format such as 1000 sqft and 1 Acres to float as well.
areas = ['Total interior livable area', 'Lot size']
for c in areas:
    acres = data[c].str.contains('Acres') == True
    col = data[c].replace(r'\b sqft\b|\b Acres\b|\b,\b','', regex=True).astype(float)
    col[acres] *= 43560
    data[c] = col

    #We filter out houses whose living areas are too small or too hard to simplify the visualization later.
abnormal = (data[areas[1]] < 10) | (data[areas[1]] > 1e4)
data = data[~abnormal]      #把筛选条件取反
types = data['Type'].isin(['SingleFamily', 'Condo', 'MultiFamily', 'Townhouse'])

    #Another important measurement is the sale price per living sqft. Let's check the differences between different house types.
data['Price per living sqft'] = data['Sold Price'] / data['Total interior livable area']
ax = sns.boxplot(x = 'Type', y = 'Price per living sqft', data = data[types], fliersize = 0)
ax.set_ylim([0, 2000]);
plt.show();

输出图形

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-sJzEvEn1-1682338484134)(LiMu.assets/image-20230423110956767.png)]

制作房子邮政编码和每英寸价格的箱线图

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
from IPython import display
display.set_matplotlib_formats('svg')

def print_line():
    print('-' * 200)

#设置显示行数
np.set_printoptions(threshold=np.inf) # np.inf表示正无穷

    #如果报错,请安装 pyarrow
pd.set_option('display.max_rows',None)      #取消行限制
pd.set_option('display.max_columns',None)       #取消列限制
pd.set_option('display.width',50000)        #增加每行的宽度

data = pd.read_feather('..\DataSet\house_sales.ftr')

    #Convert currency from string format such as $1,000,000 to float.
currency = ['Sold Price', 'Listed Price', 'Tax assessed value', 'Annual tax amount']
for c in currency:
    data[c] = data[c].replace(
        r'[$,-]', '', regex=True).replace(  #三个符号转成空,空字符串转nan
        r'^\s*$', np.nan, regex=True).astype(float)

    #Also convert areas from string format such as 1000 sqft and 1 Acres to float as well.
areas = ['Total interior livable area', 'Lot size']
for c in areas:
    acres = data[c].str.contains('Acres') == True
    col = data[c].replace(r'\b sqft\b|\b Acres\b|\b,\b','', regex=True).astype(float)
    col[acres] *= 43560
    data[c] = col

    #We filter out houses whose living areas are too small or too hard to simplify the visualization later.
abnormal = (data[areas[1]] < 10) | (data[areas[1]] > 1e4)
data = data[~abnormal]      #把筛选条件取反
types = data['Type'].isin(['SingleFamily', 'Condo', 'MultiFamily', 'Townhouse'])
data['Price per living sqft'] = data['Sold Price'] / data['Total interior livable area']

    #We know the location affect the price. Let's check the price for the top 20 zip codes.
d = data[data['Zip'].isin(data['Zip'].value_counts()[:20].keys())]
ax = sns.boxplot(x = 'Zip', y = 'Price per living sqft', data = d, fliersize = 0)
ax.set_ylim([0, 2000])
ax.set_xticklabels(ax.get_xticklabels(), rotation = 90)
plt.show()

输出图形

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-rG6DKurW-1682338484134)(LiMu.assets/image-20230423112408389.png)]

制作房子价格、挂牌价格、年纳税额和每英尺的价格相关矩阵

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
from IPython import display
display.set_matplotlib_formats('svg')

def print_line():
    print('-' * 200)

#设置显示行数
np.set_printoptions(threshold=np.inf) # np.inf表示正无穷

    #如果报错,请安装 pyarrow
pd.set_option('display.max_rows',None)      #取消行限制
pd.set_option('display.max_columns',None)       #取消列限制
pd.set_option('display.width',50000)        #增加每行的宽度

data = pd.read_feather('..\DataSet\house_sales.ftr')

    #Convert currency from string format such as $1,000,000 to float.
currency = ['Sold Price', 'Listed Price', 'Tax assessed value', 'Annual tax amount']
for c in currency:
    data[c] = data[c].replace(
        r'[$,-]', '', regex=True).replace(  #三个符号转成空,空字符串转nan
        r'^\s*$', np.nan, regex=True).astype(float)

    #Also convert areas from string format such as 1000 sqft and 1 Acres to float as well.
areas = ['Total interior livable area', 'Lot size']
for c in areas:
    acres = data[c].str.contains('Acres') == True
    col = data[c].replace(r'\b sqft\b|\b Acres\b|\b,\b','', regex=True).astype(float)
    col[acres] *= 43560
    data[c] = col

    #We filter out houses whose living areas are too small or too hard to simplify the visualization later.
abnormal = (data[areas[1]] < 10) | (data[areas[1]] > 1e4)
data = data[~abnormal]      #把筛选条件取反
types = data['Type'].isin(['SingleFamily', 'Condo', 'MultiFamily', 'Townhouse'])
data['Price per living sqft'] = data['Sold Price'] / data['Total interior livable area']

    #Last, we visualize the correlation matrix of several columns.
_, ax = plt.subplots(figsize=(4, 4))
columns = ['Sold Price', 'Listed Price', 'Annual tax amount', 'Price per living sqft']
sns.heatmap(data[columns].corr(),annot=True,cmap='RdYlGn', ax=ax)
plt.show()

输出图形

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-8OXGelj7-1682338484135)(LiMu.assets/the correlation matrix of several columns..png)]

完整代码

#课程PPT链接:https://c.d2l.ai/stanford-cs329p/_static/notebooks/cs329p_notebook_eda.slides.html#/import numpy as np

import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
from IPython import display
display.set_matplotlib_formats('svg')
# import matplotlib_inline
# matplotlib_inline.backend_inline.set_matplotlib_formats('svg')

def print_line():
    print('-' * 200)



#设置显示行数
np.set_printoptions(threshold=np.inf) # np.inf表示正无穷

    #如果报错,请安装 pyarrow
# pd.set_option('display.max_columns', 5000)
# pd.set_option('display.width', 5000)
# pd.set_option('display.max_colwidth', 5000)
pd.set_option('display.max_rows',None)#取消行限制
pd.set_option('display.max_columns',None)#取消列限制
pd.set_option('display.width',1000)#增加每行的宽度


data = pd.read_feather('DataSet/house_sales.ftr')
    #Let's check the data shape and the first a few examples
print(data.shape)   #(行数,列数)    shape[0]是行数 shape[1]是列数
print(data.head())  #前n行数据,默认前5行
print_line()

    #Warning: drop will delete data
    #We drop columns that at least 30% values are null to simplify our EDA.
# null_sum = data.isnull().sum()
# print(data.columns[null_sum < len(data) * 0.3]) # columns will keep

    #Next we check the data types
print(data.dtypes)
print_line()

    #Convert currency from string format such as $1,000,000 to float.
currency = ['Sold Price', 'Listed Price', 'Tax assessed value', 'Annual tax amount']
for c in currency:
    data[c] = data[c].replace(
        r'[$,-]', '', regex=True).replace(  #三个符号转成空,空字符串转nan
        r'^\s*$', np.nan, regex=True).astype(float)

    #???
    #Also convert areas from string format such as 1000 sqft and 1 Acres to float as well.
areas = ['Total interior livable area', 'Lot size']
for c in areas:
    acres = data[c].str.contains('Acres') == True
    col = data[c].replace(r'\b sqft\b|\b Acres\b|\b,\b','', regex=True).astype(float)
    col[acres] *= 43560
    data[c] = col

    #Now we can check values of the numerical columns. You could see the min and max values for several columns do not make sense.
print(data.describe())
print_line()

    #We filter out houses whose living areas are too small or too hard to simplify the visualization later.
abnormal = (data[areas[1]] < 10) | (data[areas[1]] > 1e4)
data = data[~abnormal]
print(sum(abnormal))
print_line()

    #Let's check the histogram of the 'Sold Price', which is the target we want to predict.
ax = sns.histplot(np.log10(data['Sold Price']))
ax.set_xlim([3,8])      #设置图形x轴的长度
ax.set_xticks(range(3, 9))      #列表的元素为图形的ticks的位置
ax.set_xticklabels(['%.0e'%a for a in 10**ax.get_xticks()]);        #X轴的名称
plt.show();

    #A house has different types. Here are the top 20 types:
print(data['Type'].value_counts()[0:20])
print_line()

    #Price density for different house types.
types = data['Type'].isin(['SingleFamily', 'Condo', 'MultiFamily', 'Townhouse'])
sns.displot(pd.DataFrame({'Sold Price':np.log10(data[types]['Sold Price']),
                          'Type':data[types]['Type']}),
            x = 'Sold Price', hue = 'Type', kind='kde')
plt.show()

    #Another important measurement is the sale price per living sqft. Let's check the differences between different house types.
data['Price per living sqft'] = data['Sold Price'] / data['Total interior livable area']
ax = sns.boxplot(x = 'Type', y = 'Price per living sqft', data = data[types], fliersize = 0)
ax.set_ylim([0, 2000]);
plt.show();

    #We know the location affect the price. Let's check the price for the top 20 zip codes.
d = data[data['Zip'].isin(data['Zip'].value_counts()[:20].keys())]
ax = sns.boxplot(x = 'Zip', y = 'Price per living sqft', data = d, fliersize = 0)
ax.set_ylim([0, 2000])
ax.set_xticklabels(ax.get_xticklabels(), rotation = 90)
plt.show()

    #Last, we visualize the correlation matrix of several columns.
_, ax = plt.subplots(figsize=(8, 8))
columns = ['Sold Price', 'Listed Price', 'Annual tax amount', 'Price per living sqft', 'Elementary School Score', 'High School Score']
sns.heatmap(data[columns].corr(),annot=True,cmap='RdYlGn', ax=ax)
plt.show()

2.2 数据清理

数据的错误

  • 收集到的数据与真实观测值不一致【数值丢失,数值错误,极端的值】
  • 好的模型对错误是有容忍度的【给了错误的数据一样是能够收敛但是精度会比用干净的数据低一点】
  • 部署了这样的模型后可能会影响新收集来的数据结果

数据错误的类型

  • 数据中某个样本的数值不在正常的分布区间中(Outlier)
  • 违背了规则(Rule violations)
  • 违反了语法上或语义上的限制(Pattern violations)
### 2.3 数据变换

对数值的变换

img

  1. 把一个列里面的数值的最小值与最大值都限定到一个固定区间内,然后把所有的元素只通过线性变化出来【将数据的单位放到合理的区间】;
  2. Z-score 一个更常见的算法:通过算法使得均值变为0,方差变为1
  3. 把一列的数据换成是-1到1之间的数据
  4. 对数值都是大于0,且数值变换比较大可以试一下log一下【log上面的加减等于原始数据的乘除,可以将计算基于百分比的】。

对图片的变换:

img

  • 将图片的尺寸变小【机器学习对低分辨率的图片不在意】
  • 图片采样的比较小,且jpeg选用中等质量压缩,可能会导致精度有1%的下降(ImageNet)【数据的大小与质量要做权衡】

对视频的变换:

img

  • 使用短视频(10s以内),将视频切到感兴趣的部分;

对文本的变换:

img

  • 词根化(语法化):把一个词变成常见的形式
  • 词元化(机器学习算法中最小的单元)

2.4 特征工程

为什么需要特征工程:

因为机器学习的算法比较喜欢定义的比较好的、它能比较好的去处理的、固定长度的输入输出。

对表的数据

img

  1. 对于整型或浮点型的数据,可以直接用或者是把最大最小值拿出来,再把这个数据分成n个区间,如果值在区间中,则会给它对应区间的下标i【这样可以让机器学习算法不去纠结一个具体的值(细粒度的值)】
  2. 对于类别的数据,一般采用one-hot(独热)编码(虽然有n列,但是只有每一列有值)【虽然有很多的类别但是常见的只有几个类,可以将少数的类别变成不确定的类别,只保留那些比较重要的类别,这样可以把这些重要的类别放到可控的单元内】
  3. 对于时间的特征,将时间的数据弄成机器学习算法能知道这些天数中是有特殊意义的日子(周末、休息日、新年之类的)
  4. 特征组合:这样子能拿到两两特征之间相关性的东西

对文本的数据

img

  • 可以将文本换成一些词元(token)
  1. Bag of woeds(BoW) model:把每一个词元(token)弄成one-hot编码,再把句子里的所有词元加起来【这里要注意的是 怎么样把词典构造出来,不能太大也不能太小;BoW model最大的问题在于原句子的信息丢失了】。
  2. Word Embeddings(词嵌入):将词变成一个向量,向量之间具有一定的语义性的(两个词之间对应的向量之间的内积比较近的话,说明这两个词在语义上来说是比较相近的)
  • 可以使用预训练的模型(BERT,GPT-3)

对于图片与视频

img

  • 传统是用手动的特征方式如SIFT来做
  • 现在用预训练好的深度神经网络来做(ResNet,I3D)

2.5 数据科学家的日常

​ 要启动一个机器学习任务

  1. 有没有足够的数据? 没有的话就去收集数据【发掘在哪里找数据;数据增强;生成自己需要的数据;(以上方法都不可以可能这个任务不那么适合机器学习)】
  2. 对数据进行提升。 标号?数据质量?模型?
  3. 对模型之后会展开
  4. 提升标号:没有标号可以去标;标号里面有很多错误的话,要对它进行清理;【数据标注:半监督学习;有钱可以众包;看看数据长什么样子,找其他的规则,从数据中提起有弱噪音的标号,也是可以用来训练模型的】
  5. 数据预处理:看看数据长什么样子;通常来说数据是有很多噪音的,要对数据清洗;将数据变成我们需要的格式;特征工程;
  6. 上面的过程可以说是一个迭代的过程;

挑战

img

  1. 数据的质与量要做权衡;
  2. 数据质量:
  3. 数据的多样性:产品所关心的方方面面都要考虑;
  4. 无偏差:数据不能只是偏向于一个方面
  5. 公平性:不区别对待数据
  6. 大数据的管理是一件很难的事情:存储;快速处理;版本控制;数据安全。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/457537.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

ArcGIS Pro地理空间数据处理完整工作流实训及python技术融合

GIS是利用电子计算机及其外部设备&#xff0c;采集、存储、分析和描述整个或部分地球表面与空间信息系统。简单地讲&#xff0c;它是在一定的地域内&#xff0c;将地理空间信息和 一些与该地域地理信息相关的属性信息结合起来&#xff0c;达到对地理和属性信息的综合管理。GIS的…

1、TI335x环境建立

记录裸机开发&#xff0c;TI A8系列处理器的AM335x过程&#xff0c;本次开发的是3352&#xff0c;在此基础上开发。 1、硬件准备&#xff1a; 已经测试调试ok的3352测试板&#xff0c;经过查看发现&#xff0c;am3352引出的下载接口是JTAG口&#xff0c;而我手里只有Jlink&…

Kubernetes---Pod调度、标签、配额、策略

静态pod 静态pod由user直接创建调用&#xff0c;不能迁移 由kebelet守护进程直接管理的pod&#xff0c;无需APIserver监管 kubelet监视每个静态pod 静态pod永远绑定到一个指定节点上的kubelet 静态pod spec不能引用其他API对象 静态pod配置路径/var/lib/kubelet/config.yaml里面…

CSS背景相关属性

一、背景颜色 属性名&#xff1a;background-color (bgc) 属性值&#xff1a;颜色取值&#xff1a;关键字&#xff0c;rgb表示法&#xff0c;rgba表示法&#xff0c;十六进制表示。 注&#xff1a; 背景颜色默认透明&#xff1a;rgba&#xff08;0&#xff0c;0&#xff0c…

C语言积锦

代码区&#xff1a;text 代码执行二进制码&#xff08;程序指令&#xff09; 具有共享、只读特性 数据区&#xff1a;1.初始化数据区data 2.未初始化数据区 bss 3.常量区 栈区&#xff1a;系统为每一个程序分配一个临时的空间 局部变量、函数信息、函数参数、数组。栈区大…

干货|Graphpad Prism也能做ERP图?So Easy!

Hello&#xff0c;大家好&#xff01; 这里是壹脑云科研圈&#xff0c;我是喵君姐姐~ 不知道你是否注意过这样一个现象。 在心理学大会报告的时候&#xff0c;专家经常会说一句话&#xff1a; 这个结果很漂亮&#xff01;&#xff01;&#xff01; 第一次听见的时候&#x…

K8s图形化管理工具Dasboard部署及使用

文章目录 一、Dashboard简介二、Dashboard部署安装三、配置Dashboard登入用户1、通过Token令牌登入2、通过kubeconfig文件登入 四、Dashboard创建容器 一、Dashboard简介 Kubernetes Dashboard是一个Web UI&#xff0c;用于管理Kubernetes集群中的应用程序和资源。它提供了一个…

使用wireshark抓包理解tcp协议和tls

首先下载安装wireshark 打开软件 1.选则自己连结的网络&#xff1b; 此时就会捕获的数据 2.加上端口过滤。 3.启动一个本地的http服务(这里采用的nodejs)&#xff1b; // server.js import koa from koa; const app new koa(); app.use(ctx > {ctx.body "hell…

托福听力专项 // Unit1 Listening for Main Ideas // Practice with Lectures // 共4篇

目录 Listening for Main Idea Lecture A a music class 单词 内容总结 Lecture B 单词 错题分析 Lecture C 单词 错题分析 Lecture D 单词 Listening for Main Idea Lecture A a music class 单词 evolve(v)to develop slowlyincorporate(v)to take in or includ…

Spring Boot使用(基础)

目录 1.Spring Boot是什么? 2.Spring Boot使用 2.1Spring目录介绍 2.2SpringBoot的使用 1.Spring Boot是什么? Spring Boot就是Spring脚手架,就是为了简化Spring开发而诞生的 Spring Boot的优点: 1.快速集成框架,提供了秒级继承各种框架,提供了启动添加依赖的功能 2.内…

修炼汇编语言第一章:汇编基础知识概述

目录 前言 一、汇编语言的组成 二&#xff1a;存储器 三&#xff1a;指令和数据 四&#xff1a;存储单元 五&#xff1a;CPU对存储器的读写 地址总线 控制总线 数据总线 前言 汇编语言是数据结构&#xff0c;操作系统&#xff0c;微机原理等重要课程的基础&#xff0…

【算法】冒泡排序

一.冒泡排序 主要思想&#xff1a; 反复交换相邻的元素&#xff0c;使较大的元素 逐渐冒泡到数组的末尾&#xff0c;从而实现排序的效果 实现过程&#xff1a; 1.遍历待排序数组&#xff0c;比较相邻的元素&#xff0c;如果前面的元素比后面的元素大&#xff0c; 就交换这两…

系统集成项目管理工程师 笔记(第八章:项目进度管理)

文章目录 8.1 规划项目进度管理 2938.1.1 规划项目进度管理的输入 2938.1.2 规划项目进度管理的工具与技术 2948.1.3 规划项目进度管理的输出 295 8.2 定义活动 2968.2.1 定义活动的输入 2968.2.2 定义活动的工具与技术 2968.2.3 定义活动的输出&#xff08;两清单、一属性&…

【深度学习】学习率与学习率衰减详解:torch.optim.lr_scheduler用法

【深度学习】学习率与学习率衰减详解&#xff1a;torch.optim.lr_scheduler用法 文章目录 【深度学习】学习率与学习率衰减详解&#xff1a;torch.optim.lr_scheduler用法1. 介绍1.1 学习率与学习率衰减 2. TensorFlow中的学习率衰减3. PyTorch中的学习率衰减2.1 optimizer 综述…

md/分类/信号领域/数字信号处理及MATLAB实现/频率调制(FM).md

文章目录 本文链接https://zh.wikipedia.org/wiki/频率调制用Python模拟FM/PM调制解调过程波形变化频率调制我的 本文链接 打死他 调频&#xff08;英语&#xff1a;Frequency Modulation&#xff0c;缩写&#xff1a;FM&#xff09;是一种以载波的瞬时频率变化来表示信息的方…

Java文件操作必备技能,10个小技巧让你快速掌握!

前言 在我们日常的开发中&#xff0c;文件操作是一个非常重要的主题。文件读写、文件复制、任意位置读写、缓存等技巧都是我们必须要掌握的。在这篇文章中&#xff0c;我将给你们介绍 10 个实用的文件操作技巧。 使用 try-with-resources 语句处理文件 IO 流&#xff0c;确保在…

C++Vector类详解

目录 1.Vector介绍 2.Vector的常见使用 2.1 vector构造函数 2.2 vector iterator使用 2.3 vector空间增长问题 2.4 vector增删改查 2.5 vector迭代器失效问题 3.Vector深度剖析及模拟实现 3.1 模拟实现&#xff08;可跳过&#xff09; 3.2 不使用memcpy剖析 1.Vector介绍 ve…

【LeetCode】106. 从中序与后序遍历序列构造二叉树

1.问题 给定两个整数数组 inorder 和 postorder &#xff0c;其中 inorder 是二叉树的中序遍历&#xff0c; postorder 是同一棵树的后序遍历&#xff0c;请你构造并返回这颗 二叉树 。 示例 1 输入&#xff1a;inorder [9,3,15,20,7], postorder [9,15,7,20,3] 输出&#…

世优科技AI数字人产品“世优BOTA”发布!全面提升AI虚拟员工能力

2023年4月20日,“世优BOTA”产品发布会在北京圆满落幕。此次发布会上,世优(北京)科技有限公司(以下简称“世优科技”)正式发布了新一代AI数字人现象级产品——“世优BOTA”。来自现实世界的LiveVideoStack创始人包研与来自数字世界的世优虚拟主持人「阿央」通过新颖的互动开场方…

JDK多版本配置及切换版本不生效问题解决

一、准备工作 首先你要有多个版本的jdk&#xff0c;如果没有请移至 https://www.oracle.com/java/technologies/downloads/ 下载&#xff0c;具体下载方法可参考&#xff1a;Java同学入职环境安装全讲解 二、配置环境变量 在环境变量中配置多个JAVA_HOME&#xff0c;我这里…