特征工程预处理

特征工程预处理

1. 特征预处理定义

通过⼀些转换函数将特征数据转换成更加适合算法模型的特征数据过程

归一化标准化目的:特征的单位或者大小相差较大,或者某特征的方差相比其他的特征要大出几个数量级,容易影响 (支配)目标结果,使得一些模型(算法)无法学习到其它的特征。

2.归一化

归一化:通过对原始数据进行变换把数据映射到【mi,mx】(默认为[0,1])之间

数据归一化:通过对原始数据进行变换把数据映射到【mi,mx】(默认为[0,1])之 间

公式总结如下:

首先需要下载sklearn包

数据归一化API代码实现如下:

from sklearn.preprocessing import StandardScaler,MinMaxScaler
#准备数据
data = [[90, 2, 10, 40],
        [60, 4, 15, 45],
        [75, 3, 13, 46]]
def dm01_StandardScaler(data):  #标准化
    transformer = StandardScaler()  #初始标准化对象
    data = transformer.fit_transform(data)  #特征转换
    print(data)
dm01_StandardScaler(data)

结果如下:

3.标准化

数据标准化:通过对原始数据进行标准化,转换为均值为0标准差为1的标准正态分布的数据

数据标准化API:

from sklearn.preprocessing import StandardScaler,MinMaxScaler
#准备数据
data = [[90, 2, 10, 40],
        [60, 4, 15, 45],
        [75, 3, 13, 46]]
def dm02_MinMaxScaler(data):  #归一化
    transformer = MinMaxScaler()
    data = transformer.fit_transform(data)
    print(data)
dm02_MinMaxScaler(data)

结果如下:

4.总结

归一法:注意最⼤值最⼩值是变化的,另外,最⼤值与最⼩值⾮常容易受异常点影响,所以这种⽅法鲁棒性较差,只适合传统精 确⼩数据场景。

标准化:在已有样本⾜够多的情况下⽐较稳定,适合现代嘈杂⼤数据场景。

鸢尾花识别案例

1.利用KNN算法对鸢尾花分类 -加载鸢尾花数据集

代码如下:

from sklearn.datasets import load_iris
iris_data =load_iris()
#加载数据
def dmo1_irisdata_jiazai(data):
    print(f'data-->\n{data}')
dmo1_irisdata_jiazai(iris_data)

结果:

2.利用KNN算法对鸢尾花分类 -加载鸢尾花数据集

代码如下:

from sklearn.datasets import load_iris
import matplotlib.pyplot as plt
import seaborn as sns
import pandas as pd
iris_data =load_iris()
#数据展示
def dmo2_irisdata_show(data):
    iris_df=pd.DataFrame(iris_data['data'],columns=iris_data.feature_names)
    #print(iris_df)
    iris_df['target']=iris_data.target
    #print(iris_df)
    feature_names=list(iris_data.feature_names)
    #print(feature_names)
    for  i in range(len(feature_names)):
        for j in range(i+1,len(feature_names)):
            c1=feature_names[i]
            c2=feature_names[j]
            sns.lmplot(x=c1,y=c2,hue='target',data=iris_df,fit_reg=False)
            plt.xlabel(c1)
            plt.ylabel(c2)
            plt.title(f'{c1}vs{c2}')
            plt.show()
dmo2_irisdata_show(iris_data)

结果:

3.利用KNN算法对鸢尾花分类 - 数据集划分

from sklearn.datasets import load_iris
import matplotlib.pyplot as plt
import seaborn as sns
import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
from sklearn.neighbors import KNeighborsClassifier
iris_data =load_iris()
#分类训练测试集
def dom3_traintest_split(data):
    mydataset=load_iris()
    x_train,x_test,y_train,y_test=train_test_split(mydataset.data,mydataset.target,test_size=0.3,random_state=22)
    print(f'数据总数量, {len(mydataset.data)}')
    print(f'训练集中的x-特征值, {len(x_train)}')
    print(f'测试集中的x-特征值, {len(x_test)}')
    print(y_train)
dom3_traintest_split(iris_data)

结果:

4.利用KNN算法对鸢尾花分类 – 模型训练– 模型评估

from sklearn.datasets import load_iris
import matplotlib.pyplot as plt
import seaborn as sns
import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
from sklearn.neighbors import KNeighborsClassifier
iris_data =load_iris()
#模型训练和预测
def dmo4_trainpredict(data):
    mydataset = load_iris()
    #赋值处理
    x_train,x_test,y_train,y_test=train_test_split(mydataset.data,mydataset.target,test_size=0.2,random_state=22)
    #数据标准化
    transfer=StandardScaler()
    x_train=transfer.fit_transform(x_train)
    #测试集标准化
    x_test=transfer.transform(x_test)
    #模型训练
    estimator=KNeighborsClassifier(n_neighbors=3)
    estimator.fit(x_train,y_train)
    #模型评估
    score=estimator.score(x_test,y_test)
    print(f'分数-->{score}')
    print(f'模型分类类别--,{estimator.classes_}')
    mydata=[[5.1, 3.5, 1.4, 0.2],
        [4.6, 3.1, 1.5, 0.2]]
    mydata=transfer.transform(mydata)
    mypred=estimator.predict(mydata)
    print(f'预测值,{mypred}')
dmo4_trainpredict(iris_data)

5.完整代码及总结

这就是一个用KNN-算法实现分类,训练,评估和预测的完整的鸢尾花案例的代码

from sklearn.datasets import load_iris
import matplotlib.pyplot as plt
import seaborn as sns
import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
from sklearn.neighbors import KNeighborsClassifier
iris_data =load_iris()
#加载数据
def dmo1_irisdata_jiazai(data):
    print(f'data-->\n{data}')
#数据展示
def dmo2_irisdata_show(data):
    iris_df=pd.DataFrame(iris_data['data'],columns=iris_data.feature_names)
    #print(iris_df)
    iris_df['target']=iris_data.target
    #print(iris_df)
    feature_names=list(iris_data.feature_names)
    #print(feature_names)
    for  i in range(len(feature_names)):
        for j in range(i+1,len(feature_names)):
            c1=feature_names[i]
            c2=feature_names[j]
            sns.lmplot(x=c1,y=c2,hue='target',data=iris_df,fit_reg=False)
            plt.xlabel(c1)
            plt.ylabel(c2)
            plt.title(f'{c1}vs{c2}')
            plt.show()
#分类训练测试集
def dom3_traintest_split(data):
    mydataset=load_iris()
    x_train,x_test,y_train,y_test=train_test_split(mydataset.data,mydataset.target,test_size=0.3,random_state=22)
    print(f'数据总数量, {len(mydataset.data)}')
    print(f'训练集中的x-特征值, {len(x_train)}')
    print(f'测试集中的x-特征值, {len(x_test)}')
    print(y_train)
#模型训练和预测
def dmo4_trainpredict(data):
    mydataset = load_iris()
    #赋值处理
    x_train,x_test,y_train,y_test=train_test_split(mydataset.data,mydataset.target,test_size=0.2,random_state=22)
    #数据标准化
    transfer=StandardScaler()
    x_train=transfer.fit_transform(x_train)
    #测试集标准化
    x_test=transfer.transform(x_test)
    #模型训练
    estimator=KNeighborsClassifier(n_neighbors=3)
    estimator.fit(x_train,y_train)
    #模型评估
    score=estimator.score(x_test,y_test)
    print(f'分数-->{score}')
    print(f'模型分类类别--,{estimator.classes_}')
    mydata=[[5.1, 3.5, 1.4, 0.2],
        [4.6, 3.1, 1.5, 0.2]]
    mydata=transfer.transform(mydata)
    mypred=estimator.predict(mydata)
    print(f'预测值,{mypred}')
if __name__ == '__main__':
    dmo2_irisdata_show(iris_data)

这里还有大致步骤

谢谢你的阅读!

  • 13
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
数据预处理特征工程数据挖掘中起到了至关重要的作用。 数据预处理数据挖掘的第二个流程,它主要是对原始数据进行清洗、转换和集成,使得数据适合后续的分析和建模过程。数据预处理包括检测、纠正或删除损坏、不准确或不适用于模型的记录,解决数据类型不同、数据质量不佳、数据缺失等问题。其目的是让数据适应模型的需求,提高数据的质量和可用性。 特征工程是将原始数据转换为更能代表预测模型的潜在问题的特征的过程。它包括特征提取、特征创造和特征选择。特征提取是从原始数据中提取新的有用信息作为特征,比如从商品名称中提取产品类别、颜色等;特征创造是通过组合或计算已有特征得到新的特征,比如通过速度和距离计算出时间;特征选择是从所有特征中选择出对模型有帮助的特征,以避免维度灾难和提高模型性能。 在数据预处理特征工程中,常用的工具包括sklearn中的Preprocessing和Impute模块,用于数据预处理的各种内容;Feature_selection模块,用于特征选择方法的实践;decomposition模块,包含降维算法;feature_extraction模块,用于特征提取;以及PCA降维算法等。 综上所述,数据预处理特征工程数据挖掘中不可或缺的环节,通过对数据进行清洗、转换和提取有用信息,将原始数据转化为适合建模和分析的特征,从而提高模型的性能和准确性。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [数据预处理特征工程](https://blog.csdn.net/simliyzch/article/details/120718292)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值