个人机器学习入门笔记


机器学习入门

ps:材料来源于B站黑马程序员,自己整理的笔记
  1. 特征工程之特征提取

模块

from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.feature_extraction import DictVectorizer
from sklearn.feature_extraction.text import CountVectorizer,TfidfVectorizer
import jieba

sklearn数据集的使用

def datasets_demo():
    iris = load_iris()
    print("鸢尾花数据集:\n",iris)
    print("数据集描述:\n",iris["DESCR"])
    print("查看特征值的名字:\n",iris.feature_names)
    print("查看特征值:\n",iris.data,iris.data.shape)

    #数据集划分(8成作为训练集,2成作为测试集)
    #使用模块sklearn.model_selection.train_test_splot(arrays.*options)
    x_train,x_test,y_train,y_test = train_test_split(iris.data,iris.target,test_size=0.2,random_state=22)
    print("训练集的特征值如下:\n",x_train,x_train.shape)

    return None

字典特征提取

def dict_demo():
    data = [{'city':'北京','temperature':100},{'city':'上海','temperature':60},{'city':'深圳','temperature':30}]
    #1实例化一个转换器类,导入模块DictVectorizer,将导入的数据进行特征提取
    # spare=True 时,返回的是散列值,对应特征在矩阵中的下标,。spare=False时,返回特征矩阵(one-hot方法)-->原本只有两个特征,现在矩阵映射出来4个特征。
    #也可以使用方法toarray(),即print("data_new:\n",data_new.toarray())
    transfer = DictVectorizer(sparse=False)

    #2、调用fit_transform()
    data_new = transfer.fit_transform(data)
    print("data_new:\n",data_new)
    print("特征名字:\n",transfer.get_feature_names())

文本特征提取

def count_demo():
    data = ["life is short,i like python","life is too long,i dislike python"]
    #1、实例化一个转换器类
    transfer = CountVectorizer()
    #2、调用fit_transform()
    data_new = transfer.fit_transform(data)
    print("data_new:\n",data_new.toarray())
    print("特征名字:\n",transfer.get_feature_names())

    return None

中文文本特征提取

def count_chinese_demo():
    data = ["我 爱 广西师范大学","广西师范大学 欢迎 你"]
    #1、实例化一个转换器类
    transfer = CountVectorizer()
     #2、调用fit_transform()
    data_new = transfer.fit_transform(data)
    print("data_new:\n",data_new.toarray())
    print("特征名字:\n",transfer.get_feature_names())

    return None

中文文本特征提取,自动分词

def count_chinese_demo2():
    #将中文文本进行分词
    data = ["后来他还说叫我妈妈准备好到时候摆宴席啊,妈妈被说的一脸懵逼,然后那个叔叔说那到时候考上北大了不用请客啊。",
             "哇,那得有多大的能耐啊。我真的不行啊。后来妈妈有说,清华北大也没什么啦,zjc只要考个离家里近的大学就行,有的读就行啦。"]

    data_new = []
    for sent in data:
        data_new.append(str(cut_words(sent)))
        print(data_new)
    #以下类似,stop_words是选择过滤单词
    transfer = CountVectorizer(stop_words=["叔叔","准备"])

    data_final = transfer.fit_transform(data_new)
    print("data_new:\n",data_final.toarray())
    print("特征名字:\n",transfer.get_feature_names())
    return None

用TF-IDF进行文章词汇重要程度分类

def tfidf_demo():
    #将中文文本进行分词
    data =  ["后来他还说叫我妈妈准备好到时候摆宴席啊,妈妈被说的一脸懵逼,然后那个叔叔说那到时候考上北大了不用请客啊。",
             "哇,那得有多大的能耐啊。我真的不行啊。后来妈妈有说,清华北大也没什么啦,"
             "zjc只要考个离家里近的大学就行,有的读就行啦。"]
    data_new = []
    for sent in data:
        data_new.append(cut_words(sent))
    #1实例化一个转换器类
    transfer = TfidfVectorizer(stop_words=["叔叔","时候"])
    #2调用fit_transform
    data_final = transfer.fit_transform(data_new)
    print("data_new:\n",data_final.toarray())
    print("特征名字:\n",transfer.get_feature_names())

    return None

使用最大最小值归一化数据,使用的公式在讲义里(无量钢化问题)

进行标准化时,只需将MinMaxScaler转换为StandardScaler()

def minmax_demo():
    #1.获取数据//read_csv()方法可能会将制表符\t读取出来,导致失败。这时换用read_table()
    data = pd.read_table("datingTestSet2.txt")
    # data = data.iloc[:, :3]
    print("data:\n",data)
    #2.实例化一个转换器类,feature_range决定最后的归元范围
    transfer = MinMaxScaler(feature_range=[2,3])
    #3.调用fit_transform
    data_new = transfer.fit_transform(data)
    print("data_new:\n",data_new)

删除低方差特征—特征选择
特征之间相关系数的计算,导包:from scipy.stats import pearsonr

def variance_demo():
    #1.导入数据
    data = pd.read_csv("factor_returns.csv")
    #2.实例化转换器类,该threshold将方差范围内的特征去掉,留下尽量不相关的特征
    transfer = VarianceThreshold(threshold=5)
    #3.调用fit_transform
    data_new = transfer.fit_transform(data.iloc[:, 1:10])
    print("data_new:\n",data_new)
    #计算两个特征之间的相关性,即计算相关系数
    r1 = pearsonr(data["pe_ratio"],data["pb_ratio"])
    print("相关系数\n:",r1)

第一章总结


在这里插入图片描述

在这里插入图片描述

分类算法

在这里插入图片描述

KNN算法

from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
from sklearn.neighbors import KNeighborsClassifier

def knn_iris():
    #1.获取数据
    iris= load_iris()
    #2.划分数据集
    x_train,x_test,y_train,y_test = train_test_split(iris.data,iris.target,random_state=22)
    #3.特征工程:标准化.-->fit计算每一列的平均值和标准差,transform()将fit计算出的结果(平均值和标准差)带入公式(x-mean)/std进行最终的转换 
    transfer = StandardScaler()
    x_train = transfer.fit_transform(x_train)
    x_test = transfer.transform(x_test)
    #4.KNN算法预估器,估计器estimator包含了sklearn中所有的算法
    #1)实例化一个estimator类
    estimator = KNeighborsClassifier(n_neighbors=3)
    #2)调用estimator中的fit进行计算,参数是训练集的特征值和目标值,即进行机器学习的训练
    estimator.fit(x_train,y_train)#在这里调用完毕后会生成模型
    #5模型评估
    #方法一:直接比对真实值和预测值
    y_predict = estimator.predict(x_test)#放入测试集,生成预测值
    print("y_predict:\n",y_predict)
    print("直接比对真实值和预测值:\n",y_test==y_predict)#预测值与目标的真正结果进行对比

    #方法二:计算准确率
    score = estimator.score(x_test,y_test)
    print("准确率为:\n",score)
    return None

用Knn算法对鸢尾花进行分类,添加网格搜索和交叉验证

def knn_iris_gscv():
    #1.获取数据
    iris = load_iris()
    #2.划分数据集
    x_train,x_test,y_train,y_test = train_test_split(iris.data,iris.target,random_state=22)
    #特征工程,标准化
    transfer = StandardScaler()
    x_train = transfer.fit_transform(x_train)
    x_test = transfer.transform(x_test)
    #knn算法预估器
    estimator = KNeighborsClassifier()

    #加入网格搜索和交叉验证,参数准备.cv表示交叉验证的次数,即将训练集分为10份。
    #网格搜索是用来确定列表中的K值,哪一个最好
    param_dict = {"n_neighbors":[1,3,4,6,7,9]}
    estimator = GridSearchCV(estimator,param_grid=param_dict,cv=10)
    estimator.fit(x_train,y_train)
    #模型评估
    #方法一:直接比对真实值和预测值
    y_predict = estimator.predict(x_test)#放入测试集,生成预测值
    print("y_predict:\n",y_predict)
    print("直接比对真实值和预测值:\n",y_test==y_predict)

    #方法二:计算准确率
    score = estimator.score(x_test,y_test)
    print("准确率为:\n",score)
    #最佳参数:best_params_
    print("最佳参数:\n",estimator.best_params_)
    #最佳结果:best_score_
    print("最佳结果:\n",estimator.best_score_)
    #最佳估计器:best_estimator
    print("最佳估计器:\n",estimator.best_estimator_)
    #交叉验证结果:cv_results_
    print("交叉验证结果:\n",estimator.cv_results_)
©️2020 CSDN 皮肤主题: 1024 设计师:上身试试 返回首页