python利用特征进行可视化样本显示_利用Python进行机器学习之特征选择

5f9052fff4f2f980990154a437aec3fc.png

毫无疑问,解决一个问题最重要的是恰当选取特征、甚至创造特征的能力,这叫做特征选取和特征工程。对于特征选取工作,我个人认为分为两个方面:

1)利用python中已有的算法进行特征选取。

2)人为分析各个变量特征与目标值之间的关系,包括利用图表等比较直观的手段方法,剔除无意义或者说不重要的特征变量,使得模型更加精炼高效。

一、scikit-learn中树算法

from sklearn import metrics

from sklearn.ensemble import ExtraTreesClassifier

model = ExtraTreesClassifier()

model.fit(X, y)

# display the relative importance of each attribute

print(model.feature_importances_)

二、RFE搜索算法

另一种算法是基于对特征子集的高效搜索,从而找到最好的子集,意味着演化了的模型在这个子集上有最好的质量。递归特征消除算法(RFE)是这些搜索算法的其中之一,Scikit-Learn库同样也有提供。

三、利用LassoCV进行特征选择

#!/usr/bin/python

import pandas as pd

import numpy as np

import csv as csv

import matplotlib

import matplotlib.pyplot as plt

from sklearn.feature_selection import RFE

from sklearn.linear_model import LogisticRegression

model = LogisticRegression()

# create the RFE model and select 3 attributes

rfe = RFE(model, 3)

rfe = rfe.fit(X, y)

# summarize the selection of the attributes

print(rfe.support_)

print(rfe.ranking_)

from sklearn.linear_model import Ridge, RidgeCV, ElasticNet, LassoCV, LassoLarsCV

from sklearn.model_selection import cross_val_score

train = pd.read_csv('train.csv', header=0) # Load the train file into a

dataframe

df = pd.get_dummies(train.iloc[:,1:-1])

df = df.fillna(df.mean())

X_train = df

y = train.price

def rmse_cv(model):

rmse= np.sqrt(-cross_val_score(model, X_train, y,

scoring="neg_mean_squared_error", cv = 3))

return(rmse)

#调用LassoCV函数,并进行交叉验证,默认cv=3 model_lasso = LassoCV(alphas = [0.1,1,0.001, 0.0005]).fit(X_train, y)

#模型所选择的最优正则化参数alpha print(model_lasso.alpha_)

#各特征列的参数值或者说权重参数,为0代表该特征被模型剔除了 print(model_lasso.coef_)

#输出看模型最终选择了几个特征向量,剔除了几个特征向量 coef = pd.Series(model_lasso.coef_, index = X_train.columns)

print("Lasso picked " + str(sum(coef != 0)) + " variables and eliminated the other " +

str(sum(coef == 0)) + " variables")

#输出所选择的最优正则化参数情况下的残差平均值,因为是3折,所以看平均值 print(rmse_cv(model_lasso).mean())

#画出特征变量的重要程度,这里面选出前3个重要,后3个不重要的举例 imp_coef = pd.concat([coef.sort_values().head(3),

coef.sort_values().tail(3)])

matplotlib.rcParams['figure.figsize'] = (8.0, 10.0)

imp_coef.plot(kind = "barh")

plt.title("Coefficients in the Lasso Model")

plt.show()

从上述代码中可以看出,权重为0的特征就是被剔除的特征,从而进行了特征选择。还可以从图上直观看出哪些特征最重要。至于权重为负数的特征,还需要进一步分析研究。

LassoCV参考:

http://scikit-learn.org/stable/modules/generated/sklearn.linear_model.LassoCV.html

#sklearn.linear_model.LassoCV

四、利用图表分析特征以及特征间的关系

1)分析特征值的分布情况,如果有异常最大、最小值,可以进行极值的截断

plt.figure(figsize=(8,6))

plt.scatter(range(train.shape[0]), np.sort(train.price_doc.values))

plt.xlabel('index', fontsize=12)

plt.ylabel('price', fontsize=12)

plt.show()

从图中可以看出,目标值price_doc有一些异常极大值散列出来,个别异常极值会干扰模型

的拟合。所以,可以截断极值。其它各特征列也可以采取该方式进行极值截断。

#截断极值,因为极值有时候可以认为是异常数值,会干扰模型的参数 ulimit = np.percentile(train.price_doc.values, 99)

llimit = np.percentile(train.price_doc.values, 1)

train['price_doc'].ix[train['price_doc']>ulimit] = ulimit

train['price_doc'].ix[train['price_doc']

2)分组进行分析

grouped_df = df.groupby('LotFrontage')['MSSubClass'].aggregate(np.mean).reset_index()

#根据LotFrontage进行分组聚合,并求出分组聚合后MSSubClass的平均值,reset_index()将分组后的结果转换成DataFrame形式

plt.figure(figsize=(12,8))

sns.barplot(grouped_df.LotFrontage.values, grouped_df.MSSubClass.values, alpha=0.9,

color='red')

plt.ylabel('MSSubClass', fontsize=12)

plt.xlabel('LotFrontage', fontsize=12)

plt.xticks(rotation='vertical')

plt.show()

这种可以分析出目标值的一个变化情况,比如房屋价格的话,可以根据年进行分组聚合,展示出每年房屋价格均值的一个变化情况,从而能够看出时间对房屋价格的一个大致影响。比如,北京房屋价格随着时间的推进,每年都在上涨,这说明时间是一个很重要的特征变量。

3)统计数据集中各种数据类型出现的次数

#打出df各列数据类型,并利用rest_index()转成DataFrame形式。一共两列,1-列名,2-类型 df_type = df.dtypes.reset_index()

#将两列更改列名 df_type.columns = ["Count", "Column Type"]

#分组统计各个类型列出现的次数 df_type=df_type.groupby("Column Type").aggregate('count').reset_index()

4)图的形式展示缺失值情况

#将各列的缺失值情况统计出来,一共2列,1-列名,2-缺失值数量 missing_df = df.isnull().sum(axis=0).reset_index()

#赋予新列名 missing_df.columns = ['column_name', 'missing_count']

#将缺失值数量>0的列筛选出来 missing_df = missing_df.ix[missing_df['missing_count']>0]

#排序 missing_df = missing_df.sort_values(by='missing_count', ascending=True)

#将缺失值以图形形式展示出来 ind = np.arange(missing_df.shape[0])

width = 0.9

fig, ax = plt.subplots(figsize=(12,18))

rects = ax.barh(ind, missing_df.missing_count.values, color='y')

ax.set_yticks(ind)

ax.set_yticklabels(missing_df.column_name.values, rotation='horizontal')

ax.set_xlabel("Count of missing values")

ax.set_title("Number of missing values in each column")

plt.show()

5)利用联合分布图分析各重要特征变量与目标值的影响关系

#先对该特征进行极值截断 col = "full_sq"

ulimit = np.percentile(train_df[col].values, 99.5)

llimit = np.percentile(train_df[col].values, 0.5)

train_df[col].ix[train_df[col]>ulimit] = ulimit

train_df[col].ix[train_df[col]

#画出联合分布图 plt.figure(figsize=(12,12))

sns.jointplot(x=np.log1p(train_df.full_sq.values),

y=np.log1p(train_df.price_doc.values), size=10)

plt.ylabel('Log of Price', fontsize=12)

plt.xlabel('Log of Total area in square metre', fontsize=12)

plt.show()

pearsonr表示两个变量的相关性系数。

6)pointplot画出变量间的关系

grouped_df = train_df.groupby('floor')['price_doc'].aggregate(np.median).reset_index()

plt.figure(figsize=(12,8))

sns.pointplot(grouped_df.floor.values, grouped_df.price_doc.values, alpha=0.8,

color=color[2])

plt.ylabel('Median Price', fontsize=12)

plt.xlabel('Floor number', fontsize=12)

plt.xticks(rotation='vertical')

plt.show()

2018/12/5 python进行机器学习(二)之特征选择 - 光彩照人 - 博客园

https://www.cnblogs.com/gczr/p/6802948.html 8/10

从中看出楼层数对价格的一个整体影响。

7)countplot展示出该特征值的数量分布情况

plt.figure(figsize=(12,8))

sns.countplot(x="price", data=df)

plt.ylabel('Count', fontsize=12)

plt.xlabel('Max floor number', fontsize=12)

plt.xticks(rotation='vertical')

plt.show()

展示出了每个价格的出现次数。

8)boxplot分析最高楼层对房屋价格的一个影响,尤其看中位价格的走势,是一个大致的判断。

plt.figure(figsize=(12,8))

sns.boxplot(x="max_floor", y="price_doc", data=train_df)

plt.ylabel('Median Price', fontsize=12)

plt.xlabel('Max Floor number', fontsize=12)

plt.xticks(rotation='vertical')

plt.show()

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

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

相关文章

poj 2886 Who Gets the Most Candies?(线段树)

题目链接:poj 2886 Who Gets the Most Candies?题目大意:N个人围成一圈玩约瑟夫环游戏,不同的是。步长不固定,由前一个出局的人决定。给定K表示起始的人。第i个淘汰的人将获得g(i)个糖果,问说谁获得的糖果最多。g(x)为…

linux c之动态打开链接库(dlopen dlsym dlclose)

1 linux提供了加载和处理动态链接库的系统调用 2 主要函数 1) dlopen、 dlopen以指定模式打开指定的动态连接库文件,并返回一个句柄给调用进程,打开模式如下: RTLD_LAZY 暂缓决定,等有需要时再解出符号 RTLD_NOW 立即决定,返回前解除所有未决定的符号。 2) dlsym、 …

甘肃2019年9月计算机二级报名入口,2019年9月甘肃计算机二级考试成绩查询入口...

【摘要】2019年9月份计算机二级考试已经圆满结束,参加考试的小伙伴们已经迫不及待的想要知道成绩了吧,小编对2019年9月甘肃计算机二级考试成绩查询入口进行了整理,参加9月份考试的朋友们到时候记得按时查询成绩哦!想要了解更多计算…

FluentEmail - 适用于 .NET 和 .NET Core 的邮件发送库

简介FluentEmail - 适用于 .NET 和 .NET Core 的邮件发送库从 .NET 和 .NET Core 发送电子邮件的最简单方法。将 Razor 用于电子邮件模板并使用 SendGrid、MailGun、SMTP 等进行发送Nuget包•FluentEmail.Core - 域模型•FluentEmail.Smtp - 通过 SMTP 服务器发送电子邮件•Flu…

基于GLT法的风云三号气象卫星校正

GLT几何校正法利用输入的几何文件生成一个地理位置查找表文件(geographic lookup table,GLT),从该文件中可以了解到某个初始像元在最终输出结果中实际的地理位置。地理位置查找表文件是一个二维图像文件,文件中所包含两个波段:地理校正图像的行和列,文件对应的灰度值表示…

安装MySql出现Error Nr.1045的解决办法

如图,最后一步出现这个错误框 这是因为上次安装过MySql,其用户数据在卸载的时候没有被删除掉,解决办法如下: 显示隐藏的文件夹,打开C盘,找到下图文件删除之 删除之后再安装一遍MySQL,就可以了转…

CentOS下MySQL忘记root密码解决方法【转载】

1.首先确认服务器出于安全的状态,也就是没有人能够任意地连接MySQL数据库。 因为在重新设置MySQL的root密码的期间,MySQL数据库完全出于没有密码保护的 状态下,其他的用户也可以任意地登录和修改MySQL的信息。可以采用将MySQL对 外…

MYSQL - php 使用 localhost 无法连接数据库

php 使用 localhost 无法连接数据库,而使用127.0.0.1却能连接成功。 可能原因: 系统hosts文件未提供127.0.0.1到localhost的解析。解决方法(以win7系统为例):找到C:\Windows\System32&#xff3…

python网易云_用python爬虫爬取网易云音乐

标签: 使用python爬虫爬取网易云音乐 需要使用的模块 只需要requests模块和os模块即可 开始工作 先去网易云音乐网页版找一下你想要听的歌曲点击进去。按键盘F12打开网页调试工具,点击Network就可以查看网络请求的相关信息,选择XHR,然后可以看…

android 固定底部 布局_Android系统列表控件

在android系统控件中,有多个控件可以展示列表数据。一、ListView该组件是android中最常用的一个UI组件,用于实现在屏幕上显示多个内容,以便于我们用手指进行滑动。ListView控件以列表的形式展示具体内容,并且能够根据数据的长度自…

C语言之在结构体里面放很多函数指针

1 原因 看了open ssl代码里面很多在结构体里面放很多函数指针,然后再来调用,这样比较规范和统一 2 代码实现 #include <stdio.h> #include <assert.h> #include <stdlib.h> #include <string.h> #include <pthread.h>typedef struct key_info …

计算机模拟考总结,高职单考单招计算机模拟一技术总结.doc

高职单考单招计算机模拟试卷一一、选择题(30*4分120分)1&#xff0e;从1946年第一台计算机诞生算起&#xff0c;计算机的发展至今经历了(? )4个年代。A.低档计算机、中档计算机、高档计算机、手提计算机B.微型计算机、小型计算机、中型计算机、大型计算机C.电子管计算机、晶体…

.NetCore中IdentityServer使用nginx-proxy的一次排错经历

前言最近在看 Duende.IdentityServer.Admin&#xff0c;本地使用IIS Express跑了一下源码&#xff0c;也看了一遍的代码&#xff0c;决定使用他们的模板创建一个Demo&#xff0c;部署在本地的Docker环境中&#xff0c;也算是踩一下坑吧。以下不会详细介绍项目的部署&#xff0c…

ENVI支持下利用高分辨率影像城市绿地信息提取方案

城市绿地在改善城市生态环境和人居环境起着积极的作用,城市绿地含量逐渐成为衡量城市生活质量的一个重要指标。此外,城市绿地的空间分布格局与其生态效应有着密切的关系。因此,必须客观、准确地掌握城市绿地信息。传统的城市绿化调查主要通过基层单位上报统计数据和实地抽样…

Job make U funck Uself!!!

今天武汉大雨&#xff0c;对于这个鬼地方已经习以为常&#xff0c;在实验室又一次看到有人前来应聘。 突然意识到当今学无大用&#xff01;&#xff08;一个英语专业毕业的本科生应聘秘书&#xff08;打杂的跑腿的&#xff09;&#xff09; 更让我惊讶的是这位竟然说不拿工资先…

nmap脚本使用总结

原文链接&#xff1a;http://drops.wooyun.org/tips/2188 0x00 前言&#xff1a; nmap的基本介绍和基本使用方法&#xff0c;在乌云知识库中已经有人提交过&#xff0c;讲的比较详细&#xff0c;在此文中就不再讲述。 具体链接&#xff1a;http://drops.wooyun.org/tips/2002 本…

python爬虫实例手机_Python爬虫实现爬取京东手机页面的图片(实例代码)

实例如下所示&#xff1a; __author__ Fred Zhao import requests from bs4 import BeautifulSoup import os from urllib.request import urlretrieve class Picture(): def __init__(self): self.headers {User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_0) Ap…

linux平台安装React Native遇到的坑

3年前我在windows平台安装过React Native,我一直都记忆犹新,那个时候facebook刚推出支持安卓,然后花了一天的时间在自己的window电脑上配置好了,还是很兴奋的,安装博客地址如下 Android之Windows下搭建React Native Android开发环境&#xff08;差不多搞了一天&#xff09; 现…

身份管理软件公司Okta计划IPO,目标融资1亿美元

Okta是一家专门提供身份管理和单点登陆&#xff08;SSO&#xff09;软件的公司。今日公司提交了一份S-1表格正式启动了IPO程序。根据文件内容显示&#xff0c;Okta计划在首次公开募股中融资1亿美元。 公司表示&#xff0c;Okta将在纳斯达克上市&#xff0c;股票代码为OKTA。 即…

jmeter对乱码如何处理_JMeter读取 Excel 表中用例数据实现接口压测

传统的接口测试&#xff0c;都是在接口中手动输入不同用例准备的多种场景参数数据&#xff0c;一遍一遍的输入来执行多个不同的用例&#xff0c;但是现在利用excel表格准备各种类型的数据&#xff0c;使用Jmeter中Jmeter CSV Data Set Config参数化实现可设置的、一次性的读取e…