# 个人机器学习入门笔记

## 机器学习入门

##### 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():
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


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


def minmax_demo():
# 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)


def variance_demo():
#1.导入数据
#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.获取数据
#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


def knn_iris_gscv():
#1.获取数据
#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_)

• 点赞
• 评论
• 分享
x

海报分享

扫一扫，分享海报

• 收藏
• 手机看

分享到微信朋友圈

x

扫一扫，手机阅读

• 打赏

打赏

Darren_zeng

你的鼓励将是我创作的最大动力

C币 余额
2C币 4C币 6C币 10C币 20C币 50C币
• 一键三连

点赞Mark关注该博主, 随时了解TA的最新博文
12-18

05-19