#案例:肿瘤细胞
# 导入pandas与numpy工具包
import pandas as pd
import numpy as np
# 创建特征列表
column_names = ['Sample code number',
'Clump Thickness',
'Uniformity of Cell Size',
'Uniformity of Cell Shape',
'Marginal Nucleoli',
'Single Epithelial Cell Size',
'Bare Nuclei',
'Bland Chromatin',
'Normal Nucleoli',
'Mitoses',
'Class']
# 从互联网读取指定数据
data = pd.read_csv('https://archive.ics.uci.edu/ml/machine-learning-databases/breast-cancer-wisconsin/breast-cancer-wisconsin.data',
names=column_names)
# 预处理-转换‘?’为缺失值
data = data.replace(to_replace='?', value=np.nan)
# 预处理-丢弃缺失值
data = data.dropna(how='any')
# 检查
data.shape
data.head()
# 分割训练集和测试集
from sklearn.model_selection import train_test_split
x_train, x_test, y_train, y_test = train_test_split(data[column_names[1:10]], data[column_names[10]],
test_size=0.25, random_state=33)
y_train.value_counts()
y_test.value_counts()
# 导入模型库
from sklearn.preprocessing import StandardScaler
from sklearn.linear_model import LogisticRegression
from sklearn.linear_model import SGDClassifier
# 标准化数据
ss = StandardScaler()
x_train = ss.fit_transform(x_train)
x_test = ss.transform(x_test)
# 训练和预测
# 逻辑回归模型
lr = LogisticRegression()
lr.fit(x_train, y_train)
lr_y_predict = lr.predict(x_test)
# 随机梯度下降模型
sgdc = SGDClassifier()
sgdc.fit(x_train, y_train)
sgdc_y_predict = sgdc.predict(x_test)
# 性能测评
from sklearn.metrics import classification_report
# LR
print 'Accuracy of LR Classifier:', lr.score(x_test, y_test)
print classification_report(y_test, lr_y_predict, target_names=['Benign', 'Malignant'])
# SGD
print 'Accuracy of SGD Classifier is:', sgdc.score(x_test, y_test)
print classification_report(y_test, sgdc_y_predict, target_names=['Benign', 'Malignant'])
#手写数字识别
# 从数据库里导入手写体数字加载器
from sklearn.datasets import load_digits
digits = load_digits()
digits.data.shape
# 分割训练集和测试集
from sklearn.model_selection import train_test_split
x_train, x_test, y_train, y_test = train_test_split(digits.data, digits.target, test_size=0.25, random_state=33)
y_train.shape
y_test.shape
# 调用模型
from sklearn.preprocessing import StandardScaler
from sklearn.svm import LinearSVC
# 标准化
ss = StandardScaler()
x_train = ss.fit_transform(x_train)
x_test = ss.transform(x_test)
lsvc = LinearSVC()
lsvc.fit(x_train, y_train)
y_predict = lsvc.predict(x_test)
# 性能测评
print 'The Accuracy of Linear SVC is:', lsvc.score(x_test, y_test)
from sklearn.metrics import classification_report
print classification_report(y_test, y_predict, target_names=digits.target_names.astype(str))
#新闻文本分类
# 从数据库里导入新闻数据抓取器
from sklearn.datasets import fetch_20newsgroups
news=fetch_20newsgroups(subset='all')
print len(news.data)
print news.data[0]
# 查看数据说明
print digits.DESCR
# 分割为训练集和测试集
from sklearn.model_selection import train_test_split
x_train, x_test, y_train, y_test = train_test_split(news.data, news.target, test_size=0.25, random_state=33)
# 预处理-文本转向量
from sklearn.feature_extraction.text import CountVectorizer
vec = CountVectorizer()
x_train = vec.fit_transform(x_train)
x_test = vec.transform(x_test)
# 调用模型
from sklearn.naive_bayes import MultinomialNB
mnb = MultinomialNB()
mnb.fit(x_train, y_train)
y_predict = mnb.predict(x_test)
# 性能测评
from sklearn.metrics import classification_report
print 'The accruracy of Naive Bayes Classifier is', mnb.score(x_test, y_test)
print classification_report(y_test, y_predict, target_names=news.target_names)
# 植物分类
# 导入数据加载器
from sklearn.datasets import load_iris
iris = load_iris()
iris.data.shape
print iris.DESCR
# 预处理:分割训练集和测试集
from sklearn.model_selection import train_test_split
x_train, x_test, y_train, y_test = train_test_split(iris.data, iris.target, test_size=0.25, random_state=33)
# 调用模型-标准化
from sklearn.preprocessing import StandardScaler
ss = StandardScaler()
x_train = ss.fit_transform(x_train)
x_test = ss.transform(x_test)
# 调用模型-分析,预测
from sklearn.neighbors import KNeighborsClassifier
knc = KNeighborsClassifier()
knc.fit(x_train, y_train)
y_predict = knc.predict(x_test)
# 性能测评
print 'The accuracy of K-Nearest Neighbor Classifier is:', knc.score(x_test, y_test)
from sklearn.metrics import classification_report
print classification_report(y_test, y_predict, target_names=iris.target_names)
# titanic生存预测
# 从互联网导入数据
import pandas as pd
titanic = pd.read_csv('http://biostat.mc.vanderbilt.edu/wiki/pub/Main/DataSets/titanic.txt')
titanic.head()
# 预处理:查看数据
titanic.info()
# 选择特征
x = titanic[['pclass', 'age', 'sex']]
y = titanic['survived']
x.info()
# 预处理:age:使用平均值填充
x['age'].fillna(x['age'].mean(), inplace=True)
x.info()
# 预处理:分割训练集和测试集
from sklearn.model_selection import train_test_split
x_train, x_test, y_train, y_test = train_test_split(x, y, test_size=0.25, random_state=33)
# 预处理:无论类别数据还是数值数据,都使用特征转换器(数值型特征将被略过)
from sklearn.feature_extraction import DictVectorizer
vec = DictVectorizer()
x_train = vec.fit_transform(x_train.to_dict(orient='record'))
x_test = vec.transform(x_test.to_dict(orient='record'))
print vec.feature_names_
# 调用模型
from sklearn.tree import DecisionTreeClassifier
dtc = DecisionTreeClassifier()
dtc.fit(x_train, y_train)
y_predict = dtc.predict(x_test)
# 性能测试
print 'The accuracy of Decision Tree Classifier is:', dtc.score(x_test, y_test)
from sklearn.metrics import classification_report
print classification_report(y_test, y_predict, target_names=['died', 'survived'])
# titanic
# 读取数据
import pandas as pd
titanic = pd.read_csv('http://biostat.mc.vanderbilt.edu/wiki/pub/Main/DataSets/titanic.txt')
# 预处理:选择特征
x = titanic[['age', 'pclass', 'sex']]
y = titanic['survived']
# 预处理:age:缺失值用平均值填充
x['age'].fillna(x['age'].mean(), inplace=True)
# 预处理:分割训练集和测试集
from sklearn.model_selection import train_test_split
x_train, x_test, y_train, y_test = train_test_split(x, y, test_size=0.25, random_state=33)
# 预处理:特征转换
from sklearn.feature_extraction import DictVectorizer
vec = DictVectorizer()
x_train = vec.fit_transform(x_train.to_dict(orient='record'))
x_test = vec.transform(x_test.to_dict(orient='record'))
# 调用模型:随机森林
from sklearn.ensemble import RandomForestClassifier
rfc = RandomForestClassifier()
rfc.fit(x_train, y_train)
rfc_y_predict = rfc.predict(x_test)
# 调用模型:梯度提升决策树
from sklearn.ensemble import GradientBoostingClassifier
gbc = GradientBoostingClassifier()
gbc.fit(x_train, y_train)
gbc_y_predict = gbc.predict(x_test)
# 性能测试
from sklearn.metrics import classification_report
print 'The accruracy of Random Forest Classifier is', rfc.score(x_test, y_test)
print classification_report(y_test, rfc_y_predict)
print 'The accruracy of Gradient tree Boosting is', gbc.score(x_test, y_test)
print classification_report(y_test, gbc_y_predict)