机器学习实操练习 1 (没有理论)
机器学习实操练习 1 (没有理论)from sklearn.model_selection import train_test_split#分开数据 测试 训练import pandas as pdfrom sklearn.datasets import load_iris#特征转换from sklearn.feature_extraction import DictVectorizer...
·
机器学习实操练习 1 (没有理论)
from sklearn.model_selection import train_test_split#分开数据 测试 训练
import pandas as pd
from sklearn.datasets import load_iris
#特征转换
from sklearn.feature_extraction import DictVectorizer#字典特征转换
from sklearn.feature_extraction.text import CountVectorizer#文本特征转换
#特征预处理
from sklearn.preprocessing import MinMaxScaler #归一化
from sklearn.preprocessing import StandardScaler#标准化
#特征降维
from sklearn.feature_selection import VarianceThreshold#低方差特征过滤
from scipy.stats import pearsonr #相关系数 皮尔斯相关系数
from sklearn.decomposition import PCA#PCA降维 主成分分析
#knn算法模型
from sklearn.neighbors import KNeighborsClassifier
#网格搜索和交叉验证
from sklearn.model_selection import GridSearchCV
import jieba#分词
# 内置数据集的使用
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)
#数据划分
x_train,x_test,y_train,y_test = train_test_split(iris.data,iris.target,test_size=0.2,random_state=22)
print(x_train,x_train.shape)
return None
#字典特征抽取
#字典特征抽取
def dict_demo():
#字典特征抽取
data = [{'1': 'h', 't': 100}, {'1': 's', 't': 120}, {'1': 's', 't': 130}, {'1': 'h', 't': 110}, ]
#实例化一个转化器类
#sparse稀疏矩阵 默认转换器中的sparse等于True
transfer = DictVectorizer(sparse=False)
#调用fit_transform
data_new = transfer.fit_transform(data)
print(data_new)#data.toarray得到的矩阵结果与sparse=false相同
print(transfer.get_feature_names())
#data = pd.read_csv("base.csv",encoding='gbk')
#print(data)
#文本特征提取
def count_demo():
#文本特征提取
data = ['like day one two','yes one day good,one']
#实例化转换器类
transfer =CountVectorizer()
#调用fit_transform
data_new = transfer.fit_transform(data)
print(data_new)#稀疏矩阵形式
print(data_new.toarray())#正常矩阵形式
print(transfer.get_feature_names())
#中文文本特征抽取
def count_chinese_demo():
#中文文本特征抽取
data = ['该生学习认真努力,注重专业知识学习,能将学习的知识与实践相结合,积极参加社会实践;',
'积极参与学校和院系组织的活动,为班级建设做出了积极的贡献;',
'团结同学,尊敬师长,遵守校规校纪,乐于助人。']
data_new = []
print(list(jieba.cut('找打的骄傲空当接龙')))
for i in data:
data_new.append(' '.join(list(jieba.cut(i))))
print(data_new)
#实例化转化器
transfer = CountVectorizer(stop_words=['该'])#stop_words 去除不想要的特征文字
#调用fit_transform
new_data = transfer.fit_transform(data_new)
print(new_data)
print(new_data.toarray())
print(transfer.get_feature_names())
#归一化 容易受异常值影响
def minmax():#归一化 容易受异常值影响
data = pd.read_csv("base.csv", encoding='gbk')
#print(data)
data = data.iloc[:,:3]
#print(data)
#构造转换器
transfer = MinMaxScaler(feature_range=[1,2])#feature_range 缩取的范围
#调用fit——transform
data_new = transfer.fit_transform(data)
#print(data)
data.iloc[:, :3] = data_new
print(data)
#标准化 一般使用标准化做数据预处理
def stand_demo():#标准化 一般使用标准化做数据预处理
data = pd.read_csv("base.csv", encoding='gbk')
#print(data)
data = data.iloc[:,:3]
#print(data)
#构造转换器
transfer = StandardScaler()
#调用fit——transform
data_new = transfer.fit_transform(data)
#print(data)
data.iloc[:, :3] = data_new
print(data)
#特征过滤 低方差 相关系数
def variance_demo():
#低方差特征过滤
data = pd.read_csv("base.csv", encoding='gbk')
data_new = data.iloc[:,0:3]
#实例化一个转换器类
transfer = VarianceThreshold(threshold=5)#threshold 设置方差阈值
#调用fit_transform
data_new = transfer.fit_transform(data_new)
data = data.dropna()
#运用相关系数时不可以有空数据和非数值数据
r1 = pearsonr(data['注册时间'],data['注册资本'])
print(r1)
#主成分分析 PCA降维
def pca_demo():
#主成分分析 PCA降维
data = [[1,2],[55,3],[1,2]]
#创建转换器实例
#n_component 为小数时为保留多少信息
#n_component为整数时为保留到几个维度
transfer = PCA(n_components=0.95)
transfer2 = PCA(n_components=2)
#调用fit_transform
data_new = transfer.fit_transform(data)
print(data_new)
data_new = transfer2.fit_transform(data)
print(data_new)
#knn算法分类iris
def knn_iris_demo():
#knn算法分类iris
#获取数据
iris = load_iris()
#划分数据集
x_train,x_test,y_train,y_test = train_test_split(iris.data,iris.target,test_size=0.2,random_state=22)
#特征工程:标准化
transfer = StandardScaler()
x_train = transfer.fit_transform(x_train)
x_test = transfer.transform(x_test)#需要与训练集的fit数据一致,只进行数据转换
#knn算法估计器
estimator = KNeighborsClassifier(n_neighbors=5)#邻居判别的个数
estimator.fit(x_train,y_train)
#模型评估
#方法一
y_predict = estimator.predict(x_test)
print('y_predict:\n',y_predict)
print("真实值与预测值对比:\n",y_predict == y_test)
#方法二
score = estimator.score(x_test,y_test)
print("准确率:",score)
#knn中加入网格搜索和交叉验证分类iris
def knn_iris_wg_jc_demo():
#knn中加入网格搜索和交叉验证分类iris
#导入数据
iris = load_iris()
x_train,x_test,y_train,y_test = train_test_split(iris.data,iris.target,test_size=0.2,random_state=12)
#特征工程 标准化
transfer = StandardScaler()
x_train = transfer.fit_transform(x_train)
x_test = transfer.transform(x_test)
#knn模型
estimator = KNeighborsClassifier()
#加入网格搜索和交叉验证
#参数准备
#param_grid 为选择的邻居个数
#cv 为选择的指定几折交叉验证
param_dict = {'n_neighbors':[1,3,5,7,9,11]}
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_predict == y_test)
# 方法二
score = estimator.score(x_test, y_test)
print("准确率:", score)
#最佳结果
print("最佳参数:",estimator.best_params_)
print("最佳结果:",estimator.best_score_)
print("最佳估计器:",estimator.best_estimator_)
if __name__ == '__main__':
#print(data)
#datasets_demo()
#dict_demo()
#count_demo()
#count_chinese_demo()
#minmax()
#variance_demo()
#pca_demo()
'''year = pd.read_csv('year_report.csv',encoding='gbk')
# print(year)
#crosstab 找到两个特征之间的关系 统计出来
year = pd.crosstab(year['ID'],year['year'])
print(year)'''
#knn_iris_demo()
knn_iris_wg_jc_demo()
更多推荐
所有评论(0)