机器学习-DAY01-DAY02-DAY03

机器学习的数据:文件csv

mysql: 1.性能瓶颈,读取速度; 2.格式不太符合机器学习要求的格式

pandas:读取工具 ,numpy:释放了GIL锁,真正的多线程

可用数据集: 

1.数据集的组成

常用数据集的结构组成:

2.特征工程的定义

数据集结构:特征值和目标值,但是有些数据集可以没有目标值

DataFrame:缺失值,需进行数据转换

机器学习:重复值,需进行去重?

特征处理会影响最后数据的结果

特征工程在整个工程中的位置:

特征工程:将原始数据转换为更好地代表预测模型的潜在问题的特征的过程,从而提高了对未知数据的预测准确性。

特征工程的意义:直接影响预测结果

Scikit-learn库:Python语言的机器学习算法

3.字典特征数据抽取

类:sklearn.feature_extraction.DictVectorizer(sparse=Ture,…)

 sparse矩阵:节约内存,方便读取处理

字典数据抽取:把字典中一些类别数据,分别进行转换成特征,成为one-hot编码(以字符串为类别的转换为编码)

4.文本特征抽取以及中文问题

 文本特征抽取:count

应用于文本分类,情感分析

中文语句分词需要借助“jieba”

 

5.tf-idf分析问题

tf:term frequency 词的频率

idf: inverse document frequency逆文档频率,值为:log(总文档数量/该词出现的文档数量)

tf * idf = 该词在文档中的重要性

6.特征预处理-归一化

通过特定的统计方法(数学方法),将数据转换为算法要求的格式

sklearn特征处理API : sklearn.preprocessing

 

sklearn归一化API:sklearn.preprocessing.MinMaxScaler

归一化的目的:使得每个特征对最终结果造成的影响相同,防止某个特征的值与其他特征值大很多而影响结果

问题:如果数据中异常点较多,会有什么影响?

异常点对最大值、最小值影响太大,会造成结果偏差,这也是归一化不可避免的缺点

7.特征处理-标准化

 

标准差的API: sklearn.preprocessing.StandardScaler

标准化总结以及缺失值处理:在已有样本足够多的情况下比较稳定,适合现在嘈杂大数据场景

如何处理缺失值:删除、插补(建议按特征(按列)填补)

 如果使用pandas处理,可以使用dropna/fillna

数据当中的缺失值:np.nan

from sklearn.feature_extraction import DictVectorizer
from sklearn.feature_extraction.text import CountVectorizer, TfidfVectorizer
from sklearn.preprocessing import MinMaxScaler,StandardScaler
from sklearn.impute import SimpleImputer
import jieba
import numpy as np
def dictvec():
    '''
    字典数据抽取,提取字典特征,变为one-hot编码
    :return: None
    '''
    # 实例化
    dict = DictVectorizer(sparse=False)
    # 调用 fit_transform
    data = dict.fit_transform(
        [{'city': '北京', 'temperature': 100}, {'city': '上海', 'temperature': 60}, {'city': '深圳', 'temperature': 30}])
    print(dict.get_feature_names())
    print(dict.inverse_transform(data))
    print(data)
    return None

def countvec():
    """
    对文本进行特征值化,
    1.统计所有文章中所有的词,重复的只看做一次
    2.对每篇文章在词的列表中统计每个词出现的次数
    3.单个字母不统计,因为单个字母没有分类依据
    4.对于中文不支持抽取词和词组,需要空格分开,语句借助jieba分词
    :return: None
    """
    # 实例化
    cv = CountVectorizer()
    # data = cv.fit_transform(
    #     ["life is short, i like python","life is too long, i dislike python"])
    data = cv.fit_transform(
            ["人生苦短,我喜欢python","人生漫长,我不喜欢python"])
    print(cv.get_feature_names())
    print(data.toarray())

    return None

def cutword():
    con1 = jieba.cut("今天很残酷,明天更残酷,后天很美好,但绝对大部分是死在明天晚上,所以每个人不要放弃今天。")
    con2 = jieba.cut("我们看到的从很远星系来的光是在几百万年之前发出的,这样当我们看到宇宙时,我们是在看它的过去。")
    con3 = jieba.cut("如果只有一种方式了解某样事物,你就不会真正了解它。了解事物真正含义的秘密取决于如何将与我们所了解的事物相联系.")
    # 转换成列表
    content1 = list(con1)
    content2 = list(con2)
    content3 = list(con3)
    # 把列表转换成字符串
    c1 = ' '.join(content1)
    c2 = ' '.join(content2)
    c3 = ' '.join(content3)

    return c1, c2, c3

def hanzivec():
    """
    中文特征值化
    :return:None
    """
    c1, c2, c3 = cutword()
    print(c1, c2, c3)

    # 实例化
    cv = CountVectorizer()

    data = cv.fit_transform(
            [c1,c2,c3])
    print(cv.get_feature_names())
    print(data.toarray())
    return None

def tfidfvec():
    """
    中文特征值化
    得到的数值矩阵为特征值的重要性
    :return:None
    """
    c1, c2, c3 = cutword()
    print(c1, c2, c3)

    # 实例化
    tf = TfidfVectorizer()

    data = tf.fit_transform([c1,c2,c3])
    print(tf.get_feature_names())
    print(data.toarray())
    return None

##########DAY03##########
def mm():
    """
    归一化处理
    :return: none
    """
    mm = MinMaxScaler(feature_range=(2,3)) # feature_range规定了归一化的范围
    data = mm.fit_transform([[90,2,10,40],[60,4,15,45],[75,3,13,46]])
    print(data)

    return None

def stand():
    """
    标准化缩放
    :return: None
    """
    std = StandardScaler()
    data = std.fit_transform([[1.,-1.,3,],[2.,4.,2.],[4.,6.,-1,]])
    print(data)
    return None

def im():
    """
    缺失值处理,在sklearn 0.22及以上版本中没有 Imputer,该方法未能实现
    :return: None
    """
    # nan NAN
    im = SimpleImputer(missing_values='nan',strategy='mean',) # axis=0 表示列,axis=1 表示行
    data = im.fit_transform([[1,2,1],[np.nan,3,5],[7,6,6]])
    print(data)
    return None

if __name__ == "__main__":
    im()

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值