2018-06-15 18:26:31 caoyu1221 阅读数 6543
  • Python数据分析机器学习)经典案例实战

    购买课程后,可扫码进入学习群,获取唐宇迪老师答疑 使用Python数据分析流行的库Numpy,Pandas,Matplotlib, Scikit-learn结合真实数据集展开可视化特征分析与机器学习建模和评估。每次课程涉及一个完整的案例,基于案例讲解python库的使用以及如何建立机器学习模型,对涉及到的机器学习算法给出通俗易懂的解释,帮助大家掌握经典机器学习算法,并应用在实际的案例中。

    9038 人正在学习 去看看 唐宇迪

之前朋友参加比赛,想用python做一个全美所有股票的涨幅走势分析,今天我就用分析苹果股票的例子手把手的教大家上手练习苹果股票涨跌图的绘制,至于更专业一点的,还是交给金融方面的大牛来分析吧,我实在看不懂股票~
还是像之前一样,我们得把机器学习的库引入进jupyter,不得不说jupyter是真心好用,敲一行代码,就能看到一行结果,以至于后面不会忘记每个变量的属性,真是居家旅行必备神器。

import pandas as pd
from pandas import Series,DataFrame
import matplotlib.pyplot as plt
import numpy as np

接下来我们就开始读取数据,数据是我已经找好的一个csv的文件:

apple = pd.read_csv('./AAPL.csv')
apple

我们可以看到从1980年12-12日苹果的股票涨势这里写图片描述

apple.shape
Out[]:
(9458, 7)

从这里面我们可以看到,一共有9458个数据。我们再来看看数据的类型

apple.dtypes
Out[]:
Date          object
Open         float64
High         float64
Low          float64
Close        float64
Adj Close    float64
Volume       float64
dtype: object

我们可以看到Date数据是str的类型,如果我们要进行操作的话不是很方便,所以接下来先把数据的类型给转化一下,转化类型在mysql中有datetime,而在这里,我们需要用到pd.to_datetime()这个函数。

apple['Date'] = pd.to_datetime(apple['Date'])
apple.dtypes
Out[]:
Date         datetime64[ns]
Open                float64
High                float64
Low                 float64
Close               float64
Adj Close           float64
Volume              float64
dtype: object

类型转好后,我们将列转为行索引,inplace=True即为修改变量值,使接下来的变量都被修改了:

apple.set_index('Date',inplace=True)
apple.head()

这里写图片描述
我们接下来开始绘制图形:

adj_plot = apple['Adj Close'].plot()
fig = adj_plot.get_figure()
#set_size_inches 设置图片的大小,单位inche
fig.set_size_inches(12,6)

这里写图片描述
接下来我们继续绘制股票其它的走势,由于Volume这个值太大,把其他效果给遮掩了,我就做了一个处理把它给删除,然后绘制的图没有Volume这个属性:

apple.drop('Volume',axis=1,inplace=True)
app = apple.plot()
fig1 = app.get_figure()
fig1.set_size_inches(12,6)

这里写图片描述
以上便是股票绘制的核心部分了,由于博主对股票认知实在有限,如果还想对股票有其他的操作的话,可以在我之前提供的pandas基础教程的基础上尽情的自由发挥。如果想对股票进行预测,可以翻看我之前的博客写到的预测鸢尾花的种类的代码部分。(python机器学习入门到精通–实战分析(三)

2018-09-27 14:01:07 qq_33361618 阅读数 2195
  • Python数据分析机器学习)经典案例实战

    购买课程后,可扫码进入学习群,获取唐宇迪老师答疑 使用Python数据分析流行的库Numpy,Pandas,Matplotlib, Scikit-learn结合真实数据集展开可视化特征分析与机器学习建模和评估。每次课程涉及一个完整的案例,基于案例讲解python库的使用以及如何建立机器学习模型,对涉及到的机器学习算法给出通俗易懂的解释,帮助大家掌握经典机器学习算法,并应用在实际的案例中。

    9038 人正在学习 去看看 唐宇迪

机器学习分为有监督学习和无监督的学习。

有监督学习:对数据的若干特征与若干标签之间的关联性进行建模的过程,确定模型后就能应用到新的未知数据中。进一步可以分为分类和回归任务。分类对应离散型数据,而回归对应的是连续性数据。SVM、随机森林和神经网络属于有监督的学习。

无监督学习:对不带任何标签的数据特征进行建模。包括聚类和降维,例如k-means算法等。

其中半监督学习介于二者之间,适用于数据标签不完整的情况。

Python机器学习主要调用模块为sklearn,里面有机器学习使用的各种模型算法以及评价指标。

进行数据分析、建模的过程一般为:读取数据—抽取样本,生成测试集和检验集—调用模型—模型预测—采用模型评价指标,评价模型预测结果

影响模型质量的两个因素为模型的复杂度以及训练集的规模。模型的学习曲线是指,训练集规模的训练得分/检验集的得分。

特征:

  • 特定复杂度的模型对较小的数据集容易过拟合,此时训练集的得分较高,检验集的得分较低;
  • 特定复杂度的模型对较大的数据集容易欠拟合;随着数据的增大,训练集得分会不断降低,检验集评分会不断升高;
  • 模型的检验集得分永远不会高于训练集得分,两条曲线不断靠近,却不会交叉。

本次实验选取多项式模型,通过模型的多项式来提高或减少模型的复杂度,观察学习曲线的变化趋势。

(一)构造多项式回归模型,生成测试样本数据。

代码:

#构造多项式模型
from sklearn.preprocessing import PolynomialFeatures #专门产生多项式的工具并且包含相互影响的特征集
from sklearn.linear_model import LinearRegression #线性回归模型
from sklearn.pipeline import make_pipeline #构造管道

def PolynomialRegression(degree=2, **kwargs): #**kwargs 形参,返回值为字典类型
    return make_pipeline(PolynomialFeatures(degree),
                        LinearRegression(**kwargs))


#形成样本数据

import numpy as np

def make_data(N, err=1.0, rseed=1):
    #随机抽样数据
    rng = np.random.RandomState(rseed)
    X = rng.rand(N, 1) ** 2
    y = 10 - 1./ (X.ravel() + 0.1)
    if err > 0:
        y += err * rng.randn(N)
    return X, y
X, y = make_data(40)

(二)绘制多项式函数图像

绘制散点图,和几个多项式函数图像,观察多项式模型拟合效果。

代码:

%matplotlib inline
import matplotlib.pyplot as plt
import seaborn; seaborn.set() #设置图形样式

X_test = np.linspace(-0.1, 1.1, 500)[:, None]

plt.scatter(X.ravel(), y, color='black')
axis = plt.axis()
for degree in [1, 3, 5]:
    y_test = PolynomialRegression(degree).fit(X,y).predict(X_test)
    plt.plot(X_test.ravel(), y_test, label='degree={0}'.format(degree))
plt.xlim(-0.1, 1.0)
plt.ylim(-2, 12)
plt.legend(loc='best');

图形:

就该图形显示,三项式函数和五项式函数的模型拟合结果较为可观,一元线性函数的模型拟合效果较差。

(三)绘制学习曲线

观察训练得分和测试得分随着项式的增加,即随着模型复杂度的增加,训练得分和检验得分的变化情况。

代码:

from sklearn.learning_curve import validation_curve

degree = np.arange(0, 21)
train_score,val_score = validation_curve(PolynomialRegression(), X, y,
                                        'polynomialfeatures__degree',
                                        degree, cv=7)
plt.plot(degree, np.median(train_score, 1),color='blue', label='training score')
plt.plot(degree, np.median(val_score, 1), color='red', label='validation score')
plt.legend(loc='best')
plt.ylim(0, 1)
plt.xlabel('degree')
plt.ylabel('score')

图像:

 结果显示:随着模型复杂度的增加,训练得分(图中的蓝线部分)快速增加,达到饱和之后,增长幅度较低,趋于平缓;

测试得分(图中红色曲线)先增加,到达某一值后由于过拟合导致得分减少;

训练得分明显高于测试得分。该结果显示随着当模型复杂度到一定程度时,再增加模型的复杂度对模型的得分可能产生较小的影响或负影响,这个时候就会考虑更换模型。

(四)增加样本数量,观察模型拟合效果

在小数据的检验结果上得出,复杂度较高的模型,由于过拟合导致检验得分较低,所以测试,当增加样本数量时,学习曲线的变化情况。

代码:

X2, y2 = make_data(200) #生成200个数据样本
plt.scatter(X2.ravel(), y2)

#重新绘制学习曲线,并将小样本曲线添加上去

degree = np.arange(21)
train_score2, val_score2 = validation_curve(PolynomialRegression(), X2, y2,
                                           'polynomialfeatures__degree',
                                           degree, cv=7)

plt.plot(degree, np.median(train_score2, 1), color='blue',
        label='train score')
plt.plot(degree, np.median(val_score2, 1), color='red',
        label='validation score')
plt.plot(degree, np.median(train_score, 1),color='blue', alpha=0.3,
        linestyle='dashed')
plt.plot(degree, np.median(val_score, 1), color='red', alpha=0.3,
        linestyle='dashed')
plt.legend(loc='lower center')
plt.ylim(0, 1)
plt.xlabel('degree')
plt.ylabel('score')

图像:

 其中虚线代表小数据集的学习曲线,实线代表大数据集的学习曲线。

结论:大规模数据集的检验得分和测试得分的变化趋势一致,过拟合情况也不是很明显,说明大数据集适合用复杂程度较高的模型。

2018-12-11 21:23:54 cg129054036 阅读数 41
  • Python数据分析机器学习)经典案例实战

    购买课程后,可扫码进入学习群,获取唐宇迪老师答疑 使用Python数据分析流行的库Numpy,Pandas,Matplotlib, Scikit-learn结合真实数据集展开可视化特征分析与机器学习建模和评估。每次课程涉及一个完整的案例,基于案例讲解python库的使用以及如何建立机器学习模型,对涉及到的机器学习算法给出通俗易懂的解释,帮助大家掌握经典机器学习算法,并应用在实际的案例中。

    9038 人正在学习 去看看 唐宇迪

下面是我们本课程学到的要点:

1)监督学习:线性回归,逻辑回归,神经网络,SVM;

2)无监督学习:k均值,PCA,异常检测

3)特别应用:推荐系统,大规模机器学习

4)机器学习系统应用建议:偏差/方差,正则化,学习算法评估,学习曲线,误差分析,上限分析等;

2017-01-20 17:49:30 say_c_box 阅读数 498
  • Python数据分析机器学习)经典案例实战

    购买课程后,可扫码进入学习群,获取唐宇迪老师答疑 使用Python数据分析流行的库Numpy,Pandas,Matplotlib, Scikit-learn结合真实数据集展开可视化特征分析与机器学习建模和评估。每次课程涉及一个完整的案例,基于案例讲解python库的使用以及如何建立机器学习模型,对涉及到的机器学习算法给出通俗易懂的解释,帮助大家掌握经典机器学习算法,并应用在实际的案例中。

    9038 人正在学习 去看看 唐宇迪

关于机器学习的应用场景

  • 推荐算法
  • 网页推荐
  • 数据挖掘
  • 无人驾驶
  • 人工智能
  • 智能医疗

机器学习的定义

计算机程序从经验E中学习任务T。 并用度量P来衡量性能。条件是它由P定义的关于T的性能随着经验E而提高。

机器学习分类

监督性学习

回归问题->连续型数据

线性回归分析

训练集
函数:h(x)=θ0+θ1x
代价函数J(θ0,θ1)=12mmk=1(h(xi)yi)2

梯度下降法最小化代价函数值
θi:=θiαθiJ(θi)
(α)
越接近局部最小点变化越慢。
矩阵和向量
* 矩阵的维数等于矩阵的行数乘以矩阵的列数
* 向量可以被视为只有一列的矩阵

多个训练集的情况,即多元线性回归
多个训练集时,用向量标注。
h(x)=θ0+mi=1θixi(可以看做是x0恒为1)

xij表示第i个样本里头的第j个特征量

X=(x0x1x2xn) θ=(θ0θ1θ2θn)

h(x)=θTX

依次更新每一个θ的值:θj:=θjα1m(hθ(xi)yi)xij(j0n)

梯度下降法中的技巧

特征缩放(feature scaling)

关键在于保证特征值的范围大小相近,最好是将xi的范围大约约束到-1到1之间。(x0恒为1所以已经在范围之内了)

均值统一化(mean normalization)

xixiuisi代替使得特征值的平均值接近0,x0不用处理

选择合适的特征值

可以通过已有特征值定义新的,更合适的特征值。

多项式回归分析

比如现在的特征值为s,h(x)=θ0+θ1x1+θ2x2=θ0+θ2s+θ3s2那么就可以使x1=s,x2=s2将多项式回归转化成多元回归分析

标准方程法

θ=(XTX)1XTY(其中X为一个(n+1)*m维矩阵用来表示m个训练集,Y为m维向量用来表示m个结果)

分类问题->离散型数据

2020-01-07 11:24:54 u013421629 阅读数 60
  • Python数据分析机器学习)经典案例实战

    购买课程后,可扫码进入学习群,获取唐宇迪老师答疑 使用Python数据分析流行的库Numpy,Pandas,Matplotlib, Scikit-learn结合真实数据集展开可视化特征分析与机器学习建模和评估。每次课程涉及一个完整的案例,基于案例讲解python库的使用以及如何建立机器学习模型,对涉及到的机器学习算法给出通俗易懂的解释,帮助大家掌握经典机器学习算法,并应用在实际的案例中。

    9038 人正在学习 去看看 唐宇迪

正态曲线呈钟型,两头低,中间高,左右对称因其曲线呈钟形,因此人们又经常称之为钟形曲线。

使用K-S检验一个数列是否服从正态分布、两个数列是否服从相同的分布。

在这里插入图片描述

下面介绍 Python 中常用的几种正态性检验方法:

scipy.stats.kstest

异常值是指样本中的个别值,其数值明显偏离其余的观测值。异常值也称离群点,异常值的分析也称为离群点的分析。
在进行机器学习过程中,需要对数据集进行异常值剔除或者修正,以便后续更好地进行信息挖掘。
对于异常值的处理,3σ原则是最常使用的一种处理数据异常值的方法。那么,什么叫3σ原则呢?
3σ原则,又叫拉依达原则,它是指假设一组检测数据中只含有随机误差,需要对其进行计算得到标准偏差,按一定概率确定一个区间,对于超过这个区间的误差,就不属于随机误差而是粗大误差,需要将含有该误差的数据进行剔除。
其局限性:仅局限于对正态或近似正态分布的样本数据处理,它是以测量次数充分大为前提(样本>10),当测量次数少的情形用准则剔除粗大误差是不够可靠的。在测量次数较少的情况下,最好不要选用该准则。
3σ原则:
数值分布在(μ-σ,μ+σ)中的概率为0.6827
数值分布在(μ-2σ,μ+2σ)中的概率为0.9545
数值分布在(μ-3σ,μ+3σ)中的概率为0.9973
其中,μ为平均值,σ为标准差。
一般可以认为,数据Y的取值几乎全部集中在(μ-3σ,μ+3σ)区间内,超出这个范围的可能性仅占不到0.3%,这些超出该范围的数据可以认为是异常值。

具体步骤如下:

  1. 首先需要保证数据列大致上服从正态分布;
  2. 计算需要检验的数据列的平均值和标准差;
  3. 比较数据列的每个值与平均值的偏差是否超过3倍,如果超过3倍,则为异常值;
  4. 剔除异常值,得到规范的数据。

方法一、KS检验3σ异常点检测:

# -*- coding: utf-8 -*-

import numpy as np
import pandas as pd
from scipy.stats import kstest


def KsNormDetect(df):
    # 计算均值
    u = df['value'].mean()
    # 计算标准差
    std = df['value'].std()
    # 计算P值
    res=kstest(df, 'norm', (u, std))[1]
    # 判断p值是否服从正态分布,p<=0.05 则服从正态分布,否则不服从。
    if res<=0.05:
        print('该列数据服从正态分布------------')
        print('均值为:%.3f,标准差为:%.3f' % (u, std))
        print('------------------------------')
        return 1
    else:
        return 0



def OutlierDetection(df,ks_res):
    # 计算均值
    u = df['value'].mean()
    # 计算标准差
    std = df['value'].std()
    if ks_res==1:
        # 定义3σ法则识别异常值
        # 识别异常值
        error = df[np.abs(df['value'] - u) > 3 * std]
        # 剔除异常值,保留正常的数据
        data_c = df[np.abs(df['value'] - u) <= 3 * std]
        # 输出异常数据
        # print(error)
        return error

    else:
        print('请先检测数据是否服从正态分布-----------')
        return None


if __name__ == '__main__':
    # 创建数据
    data = [1222, 87, 77, 92, 68, 80, 78, 84, 77, 81, 80, 80, 77, 92, 86, 76, 80, 81, 75, 77, 72, 81, 72, 84, 86, 80,
            68, 77, 87, 76, 77, 78, 92, 75, 80, 78, 123, 3, 1223, 1232]
    df = pd.DataFrame(data, columns=['value'])
    ks_res=KsNormDetect(df)
    result=OutlierDetection(df, ks_res)
    print(result)
    
该列数据服从正态分布------------
均值为:164.850,标准差为:306.289
------------------------------
    value
0    1222
38   1223
39   1232

方法二、箱线图发现异常值:

# -*- coding: utf-8 -*-

import numpy as np
import pandas as pd


def OutlierDetection(df):
    # 计算下四分位数和上四分位
    Q1 = df.quantile(q=0.25)
    Q3 = df.quantile(q=0.75)

    # 基于1.5倍的四分位差计算上下须对应的值
    low_whisker = Q1 - 1.5 * (Q3 - Q1)
    up_whisker = Q3 + 1.5 * (Q3 - Q1)

    # 寻找异常点
    kk = df[(df > up_whisker) | (df < low_whisker)]
    data1 = pd.DataFrame({'id': kk.index, '异常值': kk})
    return data1



if __name__ == '__main__':
    # 创建数据
    data = [1222, 87, 77, 92, 68, 80, 78, 84, 77, 81, 80, 80, 77, 92, 86, 76, 80, 81, 75, 77, 72, 81, 72, 84, 86, 80,
            68, 77, 87, 76, 77, 78, 92, 75, 80, 78, 123, 3, 1223, 1232]
    df = pd.DataFrame(data, columns=['value'])
    df=df.iloc[:,0]
    result=OutlierDetection(df)
    print('箱线图检测到的异常值如下---------------------')
    print(result)
箱线图检测到的异常值如下---------------------
    id   异常值
0    0  1222
36  36   123
37  37     3
38  38  1223
39  39  1232

无监督学习与维度约减

博文 来自: xuanwozhe
没有更多推荐了,返回首页