python数据挖掘(从数据集中抽取特征)

大多数数据挖掘算法都依赖于数值或类别型特征,从数据集中抽取数值和类别型特征,并选出最佳特征。

特征可用于建模, 模型以机器挖掘算法能够理解的近似的方式来表示现实

特征选择的另一个优点在于:降低真实世界的复杂度,模型比现实更容易操纵

特征选择

scikit-learn中的VarianceThreshold转换器可用来删除特征值的方差达不到最低标准 的特征。

import numpy as np

x= np.arange(30).reshape((10,3))#10个个体、3个特征的数据集
print(x)
x[:,1] = 1 #把所有第二列的数值都改为1
print(x)
from sklearn.feature_selection import VarianceThreshold
vt = VarianceThreshold() #VarianceThreshold转换器,用它处理数据集
Xt = vt.fit_transform(x)
print(Xt)#第二列消失
print(vt.variances_)#输出每一列的方差

结果:
[[ 0  1  2]
 [ 3  4  5]
 [ 6  7  8]
 [ 9 10 11]
 [12 13 14]
 [15 16 17]
 [18 19 20]
 [21 22 23]
 [24 25 26]
 [27 28 29]]
[[ 0  1  2]
 [ 3  1  5]
 [ 6  1  8]
 [ 9  1 11]
 [12  1 14]
 [15  1 17]
 [18  1 20]
 [21  1 23]
 [24  1 26]
 [27  1 29]]
[[ 0  2]
 [ 3  5]
 [ 6  8]
 [ 9 11]
 [12 14]
 [15 17]
 [18 20]
 [21 23]
 [24 26]
 [27 29]]
[ 74.25   0.    74.25]

例子:用Adult数据集借助特征为复杂的现实世界建模,预测一个人是否年收入多于五万美元

import os
import pandas as pd
data_folder =  os.path.join(os.getcwd(),‘Data‘,‘adult‘)
adult_filename = os.path.join(data_folder,‘adult.data.txt‘)
adult = pd.read_csv(adult_filename,header=None,
                    names=["Age", "Work-Class", "fnlwgt",
                           "Education", "Education-Num",
                           "Marital-Status", "Occupation",
                           "Relationship", "Race", "Sex",
                           "Capital-gain", "Capital-loss",
                           "Hours-per-week", "Native-Country",
                           "Earnings-Raw"])
adult.dropna(how=‘all‘, inplace=True) #我们需要删除包含无效数字的行(设置inplace参数为真,表示改动当前数据框,而不是新建一个)。
# print(adult["Work-Class"].unique())#数据框的unique函数就能得到所有的工作情况
adult["LongHours"] = adult["Hours-per-week"] > 40 #通过离散化过程转换为类别型特征,把连续值转换为类别型特征

#测试单个特征在Adult数据集上的表现,
X = adult[["Age", "Education-Num", "Capital-gain", "Capital-loss","Hours-per-week"]].values
y = (adult["Earnings-Raw"] == ‘ >50K‘).values
from sklearn.feature_selection import SelectKBest
from sklearn.feature_selection import chi2
transformer = SelectKBest(score_func=chi2, k=3) #使用SelectKBest转换器类,用卡方函数打分,初始化转换器
Xt_chi2 = transformer.fit_transform(X, y)#调用fit_transform方法,对相同的数据集进行预处理和转换
print(transformer.scores_)#每一列的相关性
from sklearn.tree import DecisionTreeClassifier
from sklearn.cross_validation import cross_val_score
clf = DecisionTreeClassifier(random_state=14)
scores_chi2 = cross_val_score(clf, Xt_chi2, y, scoring=‘accuracy‘)
print(scores_chi2)结果:

[ 8.60061182e+03 2.40142178e+03 8.21924671e+07 1.37214589e+06
6.47640900e+03]
[ 0.82577851 0.82992445 0.83009306] #正确率达到83%

创建特征

特征之间相关性很强,或者特征冗余,会增加算法处理难度。出于这个原因,创建特征。

from collections import defaultdict
import os
import numpy as np
import pandas as pd
data_folder = os.path.join(os.getcwd(), "Data")
data_filename = os.path.join(data_folder, "adult", "ad.data.txt")
#前几个特征是数值,但是pandas会把它们当成字符串。要修复这个问题,我们需要编写将字符串转换为数字的函数,该函数能够把只包含数字的字符串转换为数字,把其余的转化为“NaN”
def convert_number(x):
    try:
        return float(x)
    except ValueError:
        return np.nan
converters = defaultdict(convert_number)
converters[1558] = lambda x: 1 if x.strip() == "ad." else 0 #把类别这一列各个类别值由字符串转换为数值
for i in range(1558):#要这样定义才使得字典前面有定义
    converters[i]=lambda x:convert_number(x)
ads = pd.read_csv(data_filename, header=None, converters=converters)
# print(ads[:5])
ads.dropna(inplace=True)#删除空行
#抽取用于分类算法的x矩阵和y数组
X = ads.drop(1558, axis=1).values
y = ads[1558]
from sklearn.decomposition import PCA #主成分分析算法(Principal Component Analysis,PCA)的目的是找到能用较少信息描述数据集的特征组合,用PCA算法得到的数据创建模型,不仅能够近似地表示原始数据集,还能提升分类任务的正确率
pca = PCA(n_components=5)
Xd = pca.fit_transform(X)
np.set_printoptions(precision=3, suppress=True)
print(pca.explained_variance_ratio_ )#每个特征的方差
from sklearn.tree import DecisionTreeClassifier
from sklearn.cross_validation import cross_val_score
clf = DecisionTreeClassifier(random_state=14)
scores_reduced = cross_val_score(clf, Xd, y, scoring=‘accuracy‘)
print(scores_reduced)

#把PCA返回的前两个特征做成图形
from matplotlib import pyplot as plt
classes = set(y)
colors = [‘red‘, ‘green‘]
for cur_class, color in zip(classes, colors):
    mask = (y == cur_class).values
    plt.scatter(Xd[mask, 0], Xd[mask, 1], marker=‘o‘, color=color,
                label=int(cur_class))

plt.legend()
plt.show()

结果:
[ 0.854  0.145  0.001  0.     0.   ]
[ 0.944  0.924  0.925]

原文地址:https://www.cnblogs.com/master-song/p/9089268.html

时间: 2024-10-15 11:11:14

python数据挖掘(从数据集中抽取特征)的相关文章

【Python数据挖掘课程】九.回归模型LinearRegression简单分析氧化物数据

这篇文章主要介绍三个知识点,也是我<数据挖掘与分析>课程讲课的内容.同时主要参考学生的课程提交作业内容进行讲述,包括:        1.回归模型及基础知识:        2.UCI数据集:        3.回归模型简单数据分析. 前文推荐:       [Python数据挖掘课程]一.安装Python及爬虫入门介绍       [Python数据挖掘课程]二.Kmeans聚类数据分析及Anaconda介绍       [Python数据挖掘课程]三.Kmeans聚类代码实现.作业及优化 

Python数据挖掘—特征工程—数据处理

概念: 特征工程:本质上是一项工程活动,他目的是最大限度地从原始数据中提取特征以供算法和模型使用 特征工程的重要性:特征越好,灵活性越强.模型越简单.性能越出色. 特征工程包括:数据处理.特征选择.维度压缩 量纲不一: 就是单位,特征的单位不一致,不能放在一起比较 通过:0-1标准化.Z标准化.Normalizer归一化 数据处理-归一化: 1 import pandas 2 3 data=pandas.read_csv( 4 "C:\\Users\\Jw\\Desktop\\python_wo

Python数据挖掘—特征工程—特征选择

如何选择特征 根据是否发散及是否相关来选择 方差选择法 先计算各个特征的方差,根据阈值,选择方差大于阈值的特征 方差过滤使用到的是VarianceThreshold类,该类有个参数threshold,该值为最小方差的阈值,然后使用fit_transform进行特征值过滤 相关系数法 先计算各个特征对目标值的相关系数,选择更加相关的特征 递归特征消除法 使用一个基模型来进行多轮训练,经过多轮训练后,保留指定的特征数 通过estimator将基模型设置为线性模型(可以设置为其他类型),通过n_fea

Python数据挖掘入门与实践pdf

下载地址:网盘下载 内容简介  · · · · · · 本书作为数据挖掘入门读物,介绍了数据挖掘的基础知识.基本工具和实践方法,通过循序渐进地讲解算法,带你轻松踏上数据挖掘之旅.本书采用理论与实践相结合的方式,呈现了如何使用决策树和随机森林算法预测美国职业篮球联赛比赛结果,如何使用亲和性分析方法推荐电影,如何使用朴素贝叶斯算法进行社会媒体挖掘,等等.本书也涉及神经网络.深度学习.大数据处理等内容. 作者简介  · · · · · · 作者简介: Robert Layton 计算机科学博士,网络犯

Python数据挖掘入门与实践 彩图 pdf

下载地址:网盘下载 内容简介  · · · · · · 本书作为数据挖掘入门读物,介绍了数据挖掘的基础知识.基本工具和实践方法,通过循序渐进地讲解算法,带你轻松踏上数据挖掘之旅.本书采用理论与实践相结合的方式,呈现了如何使用决策树和随机森林算法预测美国职业篮球联赛比赛结果,如何使用亲和性分析方法推荐电影,如何使用朴素贝叶斯算法进行社会媒体挖掘,等等.本书也涉及神经网络.深度学习.大数据处理等内容. 作者简介  · · · · · · 作者简介: Robert Layton 计算机科学博士,网络犯

【Python数据挖掘课程】四.决策树DTC数据分析及鸢尾数据集分析

今天主要讲述的内容是关于决策树的知识,主要包括以下内容:        1.分类及决策树算法介绍        2.鸢尾花卉数据集介绍        3.决策树实现鸢尾数据集分析        前文推荐:       [Python数据挖掘课程]一.安装Python及爬虫入门介绍       [Python数据挖掘课程]二.Kmeans聚类数据分析及Anaconda介绍       [Python数据挖掘课程]三.Kmeans聚类代码实现.作业及优化        希望这篇文章对你有所帮助,尤其

【Python数据挖掘课程】五.线性回归知识及预测糖尿病实例

今天主要讲述的内容是关于一元线性回归的知识,Python实现,包括以下内容:        1.机器学习常用数据集介绍        2.什么是线性回顾        3.LinearRegression使用方法        4.线性回归判断糖尿病        前文推荐:       [Python数据挖掘课程]一.安装Python及爬虫入门介绍       [Python数据挖掘课程]二.Kmeans聚类数据分析及Anaconda介绍       [Python数据挖掘课程]三.Kmean

【Python数据挖掘课程】 三.Kmeans聚类代码实现、作业及优化

这篇文章直接给出上次关于Kmeans聚类的篮球远动员数据分析案例,同时介绍这次作业同学们完成的图例,最后介绍Matplotlib包绘图的优化知识.        前文推荐:       [Python数据挖掘课程]一.安装Python及爬虫入门介绍       [Python数据挖掘课程]二.Kmeans聚类数据分析及Anaconda介绍        希望这篇文章对你有所帮助,尤其是刚刚接触数据挖掘以及大数据的同学,同时准备尝试以案例为主的方式进行讲解.如果文章中存在不足或错误的地方,还请海涵

Python数据挖掘—回归—逻辑回归

概念 针对因变量为分类变量而进行回归分析的一种统计方法,属于概率型非线性回归 优点:算法易于实现和部署,执行效率和准确度高 缺点:离散型的自变量数据需要通过生成虚拟变量的方式来使用 在线性回归中,因变量是连续性变量,那么线性回归能根据因变量和自变量存在的线性关系来构造回归方程,因变量变成分类变量后就不存在这种关系了,需通过对数变换来进行处理(Sigmoid函数) 步骤: 1.读取数据: import pandas from pandas import read_csv data=read_csv