快速入门Python机器学习(35)(下)

简介: 快速入门Python机器学习(35)(下)

2)多项式特征(Polynomial Featur)

ax4+bx3+cx2+dx+e

rnd = np.random.RandomState(50)
x = rnd.uniform(-5,5,size=50)
X = x.reshape(-1,1)
y_no_noise = (np.cos(6*x)+x)
y = (y_no_noise + rnd.normal(size=len(x)))/2
poly = PolynomialFeatures(degree=20,include_bias=False)
X_poly = poly.fit_transform(X)
print(X_poly.shape)


输出


(50, 20)


print("原始数据第一个样本:\n {} ".format(X[0]))
print("多项式处理后第一个样本:\n{} ".format(X_poly[0]))
print("PolynomialFeatures对原始数据的处理:\n{}".format(poly.get_feature_names()))


输出

原始数据第一个样本:
[4.84191851]
多项式处理后第一个样本:
[4.84191851e+00 2.34441748e+01 1.13514784e+02 5.49629333e+02
 2.66126044e+03 1.28856062e+04 6.23910549e+04 3.02092403e+05
 1.46270680e+06 7.08230711e+06 3.42919539e+07 1.66038846e+08
 8.03946561e+08 3.89264373e+09 1.88478637e+10 9.12598202e+10
 4.41872612e+11 2.13951118e+12 1.03593388e+13 5.01590740e+13]
PolynomialFeatures对原始数据的处理:
['x0', 'x0^2', 'x0^3', 'x0^4', 'x0^5', 'x0^6', 'x0^7', 'x0^8', 'x0^9', 'x0^10', 'x0^11', 'x0^12', 'x0^13', 'x0^14', 'x0^15', 'x0^16', 'x0^17', 'x0^18', 'x0^19', 'x0^20']


line = np.linspace(-5,5,1000,endpoint=False).reshape(-1,1)
LNR_poly = LinearRegression().fit(X_poly,y)
line_poly = poly.transform(line)
plt.plot(line,LNR_poly.predict(line_poly),label='Line Regressor')
plt.xlim(np.min(X)-0.5,np.max(X)+0.5)
plt.ylim(np.min(y)-0.5,np.max(y)+0.5)
plt.plot(X,y,"o",c='g')
plt.legend(loc='lower right')
plt.show()

image.png

除了PolynomialFeatures,还有sin()、log()、exp()


14.1.6 自动选择特征

自动选择特征

  • 使用单一变量法(Univariate)
  • 基于模型特征选择(SelectFromModel)
  • 迭代特征选择(RFE)


1使用单一变量法(Univariate) SelectPercentile


class sklearn.feature_selection.SelectPercentile(score_func=, *, percentile=10)[source]


参数

参数

类型

解释

score_func

callable, default=f_classif

函数获取两个数组Xy,并返回一对数组(scorespvalues)或一个带有scores的数组。默认值为f_classif 。默认函数仅适用于分类任务。要保留的功能的百分比

percentile

int, default=10

要保留的功能的百分比


属性

属性

类型

解释

scores_

array-like of shape (n_features,)

多特征。

pvalues_

array-like of shape (n_features,)

特征得分的p值,如果score_func只返回得分,则为无。


方法

fit(X, y)

在(Xy)上运行score函数并获得适当的特性。

fit_transform(X[, y])

适应数据,然后转换它。

get_params([deep])

获取此估计器的参数。

get_support([indices])

获取所选特征的掩码或整数索引。

inverse_transform(X)

反转转换操作。

set_params(**params)

设置此估计器的参数。

transform(X)

X减少到选定的特征。


股票数据预处理

def dealdata(mydata):
    if str(mydata)[-1]=='%':
        try:
            return (float(str(mydata)[:-1])/100)
        except:
            return mydata 
    elif str(mydata)[-1]=='万':
        try:
            return float(str(mydata)[:-1])*10000
        except:
            return mydata
    elif str(mydata)[-1]=='亿':
        try:
            return float(str(mydata)[:-1])*100000000
        except:
            return mydata 
     else:
            return mydata      
def dealcsv():
       stock = pd.read_csv('000002.csv',encoding='GBK')
       new_stock = stock.applymap(dealdata)
       print(new_stock.head())
       new_stock.to_csv('stock.csv',encoding='GBK')
from sklearn.preprocessing import StandardScaler
from sklearn.feature_selection import SelectPercentile
def stock():
    stock = pd.read_csv('stock.csv',encoding='GBK')
    print(stock.head())



编号

序号

代码

名称

总市值

每股收益

净利润

主营收

0

0

1401

600136

当代文体


3397000000

-3.34

-1.299000e+09

4.110000e+08

1

1

1402

688668

鼎通科技


2212000000

0.88

5.408000e+07

2.700000e+08

2

2

1403

688008

澜起科技


95500000000

0.95

8.780000e+08

1.468000e+09

3

3

1404

603916

苏博特


8651000000

1.30

3.020000e+08

2.451000e+09

4

4

1405

600277

亿利洁能


7395000000

0.13

2.250000e+08

8.683000e+09

[5 rows x 24 columns]


#设置目标
y = stock['涨跌幅']
print(y.shape)
print(y[0])


(408,)
-0.0252


408条数据

'涨跌幅'列第一个数据为:-0.0252

#提取特征值
features = stock.loc[:,'价格':'流通市值']
X = features.values
print(X.shape)
print(X[1])


(408, 15)
[ 2.594e+01 -6.700e-01  0.000e+00  2.661e+01  2.661e+01  2.670e+01
  2.593e+01  6.581e+03  1.721e+07  3.380e-02  9.800e-01  3.226e-01
  2.890e-02  2.950e+01  5.020e+08]


408条数据,提取15个特征项

用神经网络进行处理

mlp = MLPRegressor(random_state=53,hidden_layer_sizes=[100,100,100],alpha=0.1)
X_train, X_test, y_train, y_test = train_test_split(X, y, random_state=62)
#预处理
scaler = StandardScaler()
scaler.fit(X_train)
X_train_scaled = scaler.transform(X_train)
X_test_scaled = scaler.transform(X_test)
mlp.fit(X_train_scaled,y_train)
print('训练集得分:{:.2%}'.format(mlp.score(X_train_scaled,y_train)))
print('测试集得分:{:.2%}'.format(mlp.score(X_test_scaled,y_test)))


训练集得分:47.47%
测试集得分:48.47%


random_state,hidden_layer_sizes,alpha根据自身数据,调整到最优解

获取涨幅>=0.05的企业名称

wanted = stock.loc[:,'名称']
print(wanted[y>=-0.05])


0      当代文体
1      鼎通科技
2      澜起科技
3       苏博特
4      亿利洁能
       ... 
362    盟升电子
363    青海春天
364    瀚蓝环境
365     华润微
366    ST亚星
Name: 名称, Length: 367, dtype: object


from sklearn.preprocessing import PolynomialFeatures
select = SelectPercentile(percentile=50)
select.fit(X_train_scaled,y_train)
X_train_selected = select.transform(X_train_scaled)
print('经过缩放后的形态:{}'.format(X_train_scaled.shape))
print('特征选择后的形态:{}'.format(X_train_selected.shape))
15个特征项成为了7个,某些被过滤掉了
mask = select.get_support()
print(mask)
#用图像表示单一变量法特征选择结果
plt.matshow(mask.reshape(1,-1),cmap=plt.cm.cool)
plt.xlabel(u"特征选择")
plt.rcParams['font.sans-serif']=['SimHei']
plt.rcParams['axes.unicode_minus']=False
plt.show()


[False False False False False False False True True True True False True True True]

image.png

False (蓝色):过滤掉

True (粉色) :没有过滤掉

#使用特征选择后数据集训练神经网络
X_test_selected = select.transform(X_test_scaled)
mlp_select = MLPRegressor(random_state=53,hidden_layer_sizes=[100,100,100],alpha=0.1)
mlp_select.fit(X_train_selected,y_train)
print('单一变量法特征选择后训练集得分:{:.2%}'.format(mlp_select.score(X_train_selected,y_train)))
print('单一变量法特征选择后测试集得分:{:.2%}'.format(mlp_select.score(X_test_selected,y_test)))


输出


单一变量法特征选择后训练集得分:29.44%
单一变量法特征选择后测试集得分:18.36%


噪音多得分上升,否则下降,所以适合噪音多数据

测试集得分: 48.47% -> 18.36 %


直接处理

univariate

47.47%48.47%

29.44%18.36%


2)基于模型特征选择(SelectFromModel)

class sklearn.feature_selection.SelectFromModel(estimator, *, threshold=None, prefit=False, norm_order=1, max_features=None, importance_getter='auto')


属性

属性

类型

解释

estimator_

an estimator

构建变压器的基估计器。只有当一个非拟合的估计器被传递到SelectFromModel时,即prefitFalse时,才会存储这个值。

threshold_

float

用于特征选择的阈值。


方法

fit(X[, y])

安装SelectFromModel meta-transformer。

fit_transform(X[, y])

适应数据,然后转换它。

get_params([deep])

获取此估计器的参数。

get_support([indices])

获取所选特征的掩码或整数索引。

inverse_transform(X)

反转转换操作。

partial_fit(X[, y])

只安装一次SelectFromModel meta-transformer。

set_params(**params)

设置此估计器的参数。

transform(X)

X减少到选定的特征。


from sklearn.feature_selection import SelectFromModel
from sklearn.ensemble import RandomForestRegressor
Def selectFromModel():
    stock = pd.read_csv('stock.csv',encoding='GBK')
    y = stock['涨跌幅’]
    features = stock.loc[:,'价格':'流通市值’]
    X = features.values
    X_train, X_test, y_train, y_test = train_test_split(X, y, random_state=62)
    #预处理
    scaler = StandardScaler()
    scaler.fit(X_train)
    X_train_scaled = scaler.transform(X_train)
    X_test_scaled = scaler.transform(X_test)
    sfm = SelectFromModel(estimator=RandomForestRegressor(n_estimators=100,random_state=38),threshold='median')
    sfm.fit(X_train_scaled,y_train)
    X_train_sfm = sfm.transform(X_train_scaled)                    
    print('经过随机森林模型特征选择后的的数据形态:{}'.format(X_train_sfm.shape))
    mask = sfm.get_support()
    print(mask)


输出

经过随机森林模型进行特征后的的数据形态:(306, 8)
[False True False False False False True False False True True False True True True True]


模型选择:

1,随机森林,具有feature_importances_属性

2,L1线性模型,学习稀疏矩阵


image.png


#使用随机森林特征选择后数据集训练神经网络
X_test_sfm = sfm.transform(X_test_scaled)
mlp_sfm = MLPRegressor(random_state=53,hidden_layer_sizes=[100,100,100],alpha=0.1)
mlp_sfm.fit(X_train_sfm,y_train)
print('经过随机森林模型特征选择后训练集得分:{:.2%}'.format(mlp_sfm.score(X_train_sfm,y_train)))
print('经过随机森林模型特征选择后测试集得分:{:.2%}'.format(mlp_sfm.score(X_test_sfm,y_test)))


输出

经过随机森林模型特征选择后的数据形态:(306, 8)
[False True False False False False False True True True True True True True False]
经过随机森林模型特征选择后训练集得分:37.46%
经过随机森林模型特征选择后测试集得分:34.72%


直接处理

univariate

SelectFromModel

47.47%48.47%

29.44%18.36%

37.46%34.72%


3)迭代特征选择(RFE)


class sklearn.feature_selection.RFE(estimator, *, n_features_to_select=None, step=1, verbose=0, importance_getter='auto')


属性

属性

类型

解释

estimator_

Estimator instance

用于选择特征的拟合估计量

n_features_

Int

选定要素的数量

ranking_

ndarray of shape (n_features,)

特征排名,使得ranking_[i]对应于第i特征的排名位置。选定的(即,估计的最佳)特征被分配为秩1

support_

ndarray of shape (n_features,)

选定特征的遮罩


方法

decision_function(X)

计算X的决策函数。

fit(X, y)

RFE模型进行拟合,然后对所选模型进行基础估计。

fit_transform(X[, y])

适应数据,然后转换它。

get_params([deep])

获取此估计器的参数。

get_support([indices])

获取所选特征的掩码或整数索引。

inverse_transform(X)

反转转换操作。

predict(X)

X减少到选定的特征,然后使用。

predict_log_proba(X)

预测X的类对数概率。

predict_proba(X)

预测X的类概率。

score(X, y)

X减少到所选特征,然后返回所选特征的分数。

set_params(**params)

设置此估计器的参数。

transform(X)

X减少到选定的特征。



from sklearn.feature_selection import RFE
def elimination():
    stock = pd.read_csv('stock.csv',encoding='GBK’)
    y = stock['涨跌幅’]
    features = stock.loc[:,'价格':'流通市值’]
    X = features.values
    X_train, X_test, y_train, y_test = train_test_split(X, y, random_state=62)
    #预处理
    scaler = StandardScaler()
    scaler.fit(X_train)
    X_train_scaled = scaler.transform(X_train)
    X_test_scaled = scaler.transform(X_test)
    rfe = RFE(RandomForestRegressor(n_estimators=100,random_state=38),n_features_to_select=8)
    rfe.fit(X_train_scaled,y_train)
    X_train_rfe = rfe.transform(X_train_scaled)
    print('经过随机森林模型进行迭代特征选择后的的数据形态:{}'.format(X_train_rfe.shape))
mask = rfe.get_support()
    print(mask)
    print(mask)
     #用图像表示特征选择结果
    plt.matshow(mask.reshape(1,-1),cmap=plt.cm.cool)
    plt.xlabel(u"特征选择")
    plt.rcParams['font.sans-serif']=['SimHei’]
    plt.rcParams['axes.unicode_minus']=False
    plt.show()


经过随机森林模型进行迭代特征选择后的数据形态:(306, 8)
[False True False True False False False True False True True True True True False]

image.png

使用随机森林迭代特征选择后数据集训练随机森林

       X_test_rfe = rfe.transform(X_test_scaled)
       mlp_rfe = MLPRegressor(random_state=53,hidden_layer_sizes=[100,100,100],alpha=0.1)
       mlp_rfe.fit(X_train_rfe,y_train)
        print('经过随机森林迭代特征选择后训练集得分:{:.2%}'.format(mlp_rfe.score(X_train_rfe,y_train)))
        print('经过随机森林迭代特征选择后测试集得分:{:.2%}'.format(mlp_rfe.score(X_test_rfe,y_test)))


输出

随机森林迭代特征选择后训练集得分:41.59%
经过随机森林迭代特征选择后测试集得分:43.61%


直接处理

univariate

SelectFromModel

RFE

47.47%48.47%

29.44%18.36%

37.46%34.72%

41.59%43.61%

目录
相关文章
|
1天前
|
机器学习/深度学习 人工智能 自然语言处理
【机器学习】python之人工智能应用篇--代码生成技术
代码生成技术是人工智能与软件工程交叉领域的一项重要技术,它利用机器学习、自然语言处理和其他AI算法自动编写或辅助编写计算机程序代码。这一技术旨在提高编程效率、降低错误率,并帮助非专业开发者快速实现功能。以下是代码生成技术的概述及其典型应用场景。
15 6
|
1天前
|
机器学习/深度学习 人工智能 自然语言处理
【机器学习】python之人工智能应用篇——3D生成技术
在Python中,人工智能(AI)与3D生成技术的结合可以体现在多个方面,比如使用AI算法来优化3D模型的生成、通过机器学习来预测3D模型的属性,或者利用深度学习来生成全新的3D内容。然而,直接通过AI生成完整的3D模型(如从文本描述中生成)仍然是一个活跃的研究领域。 3D生成技术是一种通过计算机程序从二维图像或文本描述自动创建三维模型的过程。这一技术在近年来得到了飞速的发展,不仅为游戏、动画和影视行业带来了革命性的变革,还在虚拟现实、增强现实以及工业设计等多个领域展现出了巨大的应用潜力
7 2
|
1天前
|
机器学习/深度学习 人工智能 自然语言处理
【机器学习】python之人工智能应用篇--游戏生成技术
游戏生成技术,特别是生成式人工智能(Generative Artificial Intelligence, 简称Generative AI),正逐步革新游戏开发的多个层面,从内容创作到体验设计。这些技术主要利用机器学习、深度学习以及程序化内容生成(Procedural Content Generation, PCG)来自动创造游戏内的各种元素,显著提高了开发效率、丰富了游戏内容并增强了玩家体验。以下是生成式AI在游戏开发中的几个关键应用场景概述
6 2
|
4天前
|
机器学习/深度学习 人工智能 算法
如何使用Scikit-learn在Python中构建一个机器学习分类器
如何使用Scikit-learn在Python中构建一个机器学习分类器
10 3
|
3天前
|
机器学习/深度学习 JSON API
【Python奇迹】FastAPI框架大显神通:一键部署机器学习模型,让数据预测飞跃至Web舞台,震撼开启智能服务新纪元!
【8月更文挑战第16天】在数据驱动的时代,高效部署机器学习模型至关重要。FastAPI凭借其高性能与灵活性,成为搭建模型API的理想选择。本文详述了从环境准备、模型训练到使用FastAPI部署的全过程。首先,确保安装了Python及相关库(fastapi、uvicorn、scikit-learn)。接着,以线性回归为例,构建了一个预测房价的模型。通过定义FastAPI端点,实现了基于房屋大小预测价格的功能,并介绍了如何运行服务器及测试API。最终,用户可通过HTTP请求获取预测结果,极大地提升了模型的实用性和集成性。
11 1
|
13天前
|
机器学习/深度学习 自然语言处理 算法
【数据挖掘】金山办公2020校招大数据和机器学习算法笔试题
金山办公2020校招大数据和机器学习算法笔试题的解析,涵盖了编程、数据结构、正则表达式、机器学习等多个领域的题目和答案。
40 10
|
13天前
|
机器学习/深度学习 存储 人工智能
【数据挖掘】2022年2023届秋招知能科技公司机器学习算法工程师 笔试题
本文是关于2022-2023年知能科技公司机器学习算法工程师岗位的秋招笔试题,包括简答题和编程题,简答题涉及神经网络防止过拟合的方法、ReLU激活函数的使用原因以及条件概率计算,编程题包括路径行走时间计算和两车相向而行相遇时间问题。
35 2
【数据挖掘】2022年2023届秋招知能科技公司机器学习算法工程师 笔试题
|
13天前
|
机器学习/深度学习 数据采集 数据可视化
基于python 机器学习算法的二手房房价可视化和预测系统
文章介绍了一个基于Python机器学习算法的二手房房价可视化和预测系统,涵盖了爬虫数据采集、数据处理分析、机器学习预测以及Flask Web部署等模块。
基于python 机器学习算法的二手房房价可视化和预测系统
|
17天前
|
机器学习/深度学习 分布式计算 算法
【算法工程师】成为一名优秀的机器学习算法工程师所需知识及资料汇总-附思维导图
成为一名优秀的机器学习算法工程师所需要具备的技能和知识,包括理论基础、数学能力、编程技能、实践经验以及对特定领域的深入了解,并提供了学习资源和面试准备建议。
46 3
【算法工程师】成为一名优秀的机器学习算法工程师所需知识及资料汇总-附思维导图
|
2天前
|
机器学习/深度学习 算法 搜索推荐
【机器学习】机器学习的基本概念、算法的工作原理、实际应用案例
机器学习是人工智能的一个分支,它使计算机能够在没有明确编程的情况下从数据中学习并改进其性能。机器学习的目标是让计算机自动学习模式和规律,从而能够对未知数据做出预测或决策。
7 2