范文健康探索娱乐情感热点
投稿投诉
热点动态
科技财经
情感日志
励志美文
娱乐时尚
游戏搞笑
探索旅游
历史星座
健康养生
美丽育儿
范文作文
教案论文

吴恩达机器学习练习SVM支持向量机(不存在学不会!)

  这篇文章主要为我们带来了吴恩达机器学习的一个练习:SVM支持向量机,通过本次练习相信你能对机器学习深入更进一步,需要的朋友可以参考下!
  【关注博主,持续分享编程干货~】 1 Support Vector Machines1.1 Example Dataset 1|   %matplotlib  inline|   import numpy as np|   import pandas as pd |   import matplotlib.pyplot as plt |   import seaborn as sb|   from scipy .io import  loadmat|   from sklearn import svm
  大多数SVM的库会自动帮你添加额外的特征X₀以及θ₀,所以无需手动添加|   mat = loadmat("./data/ex6data 1.mat")|   print(mat.keys())|   # dict_keys (["__header__", "__version__", "__globals__", "X", "y"])|   X = mat["X"]|   y = mat["y"]
  |   def plotData(X, y):|   plt.figure(figsize=(8,5))|   plt.scatter (X[:,0], X[:,1], c=y.flatten(), cmap ="rainbow")|   plt.xlabel("X1")|   plt.ylabel ("X2")|   plt.legend()|   plotData (X, y)
  |   def plotBoundary (clf, X):|   """plot decision bondary """|   x_min, x_max = X[:,0].min()*1.2, X[:,0].max()*1.1|   y_min, y_max = X[:,1].min()*1.1,X[:,1].max()*1.1|   xx, yy = np .meshgrid(np.linspace (x_min, x_max, 500),|   np.linspace (y_min, y_max, 500))|   Z = clf.predict(np.c_[xx.ravel(), yy.ravel()])|   Z = Z.reshape(xx.shape )|   plt.contour(xx, yy, Z)
  |   models = [svm.SVC(C, kernel="linear") for C in [1, 100]]|   clfs  = [model.fit(X, y.ravel()) for model  in models]
  |   title = ["SVM Decision Boundary  with C = {} (Example  Dataset 1".format(C) for C in [1, |   100]]|    for model ,title in zip(clfs,title):|    plt.figure(figsize =(8,5))|    plotData(X, y)|   plotBoundary (model, X)|    plt.title(title)
  可以从上图看到,当C比较小时模型对误分类的惩罚增大,比较严格,误分类少,间隔比较狭窄。
  当C比较大时模型对误分类的惩罚增大,比较宽松,允许一定的误分类存在,间隔较大。
  1.2 SVM with Gaussian Kernels
  这部分,使用SVM做非线性分类。我们将使用高斯核函数。
  为了用SVM找出一个非线性的决策边界,我们首先要实现高斯核函数。我可以把高斯核函数想象成一个相似度函数,用来测量一对样本的距离,(x ⁽ ʲ ⁾,y ⁽ ⁱ ⁾)
  这里我们用sklearn自带的svm中的核函数即可。
  1.2.1 Gaussian Kernel|   def gaussKernel(x1, x2, sigma ):|   return np.exp (- ((x1 - x2) ** 2).sum() / (2 * sigma ** 2))|   gaussKernel (np.array([1, 2, 1]),np.array ([0, 4, -1]), 2.) # 0.32465246735834974
  1.2.2 Example Dataset 2|   mat = loadmat("./data /ex6data2.mat ")|   X2 = mat["X"]|   y2 = mat["y"]|   plotData (X2, y2)
  |   sigma = 0.1|   gamma = np.power (sigma,-2.)/2|   clf = svm.SVC(C=1, kernel="rbf", gamma=gamma)|   modle = clf.fit (X2, y2.flatten ())|   plotData(X2, y2)|   plotBoundary (modle, X2)
  1.2.3 Example Dataset 3|   mat3 = loadmat ("data/ex6data3.mat")|   X3, y3 = mat3["X"], mat3["y"]|   Xval, yval = mat3 ["Xval"], mat3["yval"]|   plotData (X3, y3)
  |   Cvalues = (0.01, 0.03, 0.1, 0.3, 1., 3., 10., 30.)|   sigmavalues = Cvalues|   best_pair, best_score = (0, 0), 0|   for C in Cvalues :|   for sigma in sigmavalues:|   gamma = np.power (sigma,-2.)/2|   model = svm.SVC(C=C,kernel="rbf",gamma=gamma)|   model.fit(X3, y3.flatten())|   this_score = model.score(Xval, yval )|   if this _score > best _score:|   best_score = this_score|   best_pair = (C, sigma )|   print("best_pair={}, best_score={}".format(best_pair, best_score))|   # best_pair=(1.0, 0.1), best_score=0.965
  |   model = svm.SVC(C=1., kernel="rbf", gamma  = np.power(.1, -2.)/2)|   model.fit(X3, y3.flatten()) |   plotData(X3, y3)|   plotBoundary(model , X3)
  |   # 这我的一个练习画图的,和作业无关,给个画图的参考。|   import numpy as np|   import matplotlib.pyplot  as plt|   from sklearn import svm|   # we create 40 separable  points|  np.random.seed(0)|   X = np.array([[3,3],[4,3],[1,1]])|   Y = np.array([1,1,-1])|   # fit the model |   clf = svm.SVC (kernel="linear")|   clf.fit(X, Y)|   # get the separating hyperplane|   w = clf.coef_[0]|   a = -w[0] / w[1]|   xx = np.linspace (-5, 5)|   yy = a * xx - (clf.intercept_[0]) / w[1]|   # plot the parallels to the separating hyperplane  that pass through the|   # support vectors|   b = clf.support _vectors_[0]|   yy_down = a * xx + (b[1] - a * b[0])|   b = clf.support_vectors_[-1]|   yy_up = a * xx + (b[1] - a * b[0])|   # plot the line, the points, and the nearest vectors to the plane |   plt.figure(figsize=(8,5))|   plt.plot(xx, yy, "k-")|   plt.plot(xx, yy_down , "k--")|   plt.plot(xx, yy_up , "k--")|   # 圈出支持向量|   plt.scatter (clf.support_vectors_[:, 0], clf.support_vectors_[:, 1],|   s=150, facecolors="none", edgecolors ="k", linewidths=1.5)|   plt.scatter(X[:, 0], X[:, 1], c=Y, cmap=plt.cm.rainbow )|   plt.axis ("tight")|   plt.show()|   print(clf.decision_function(X))
  |   [ 1. 1.5 -1. ]
  2 Spam Classification2.1 Preprocessing Emails
  这部分用SVM建立一个垃圾邮件分类器。你需要将每个email变成一个n维的特征向量,这个分类器将判断给定一个邮件x是垃圾邮件(y=1)或不是垃圾邮件(y=0)。
  take a look at examples from the dataset
  |   with open("data/emailSample1.txt", "r") as f:|   email = f.read() |   print(email)
  |   > Anyone knows how  much it costs to host a web  portal ?|   >|   Well, it depends on how many  visitors you"re expecting.|   This can be anywhere  from less than 10 bucks a month to a couple of $100.|   You should checkout http://www.rackspace .com/ or perhaps Amazon  EC2|   if youre running  something big..|   To unsubscribe yourself from this mailing list, send an email to:|   groupname-unsubscribe @egroups.com
  可以看到,邮件内容包含 a URL, an email address(at the end), numbers, and dollar amounts. 很多邮件都会包含这些元素,但是每封邮件的具体内容可能会不一样。因此,处理邮件经常采用的方法是标准化这些数据,把所有URL当作一样,所有数字看作一样。
  例如,我们用唯一的一个字符串‘httpaddr"来替换所有的URL,来表示邮件包含URL,而不要求具体的URL内容。这通常会提高垃圾邮件分类器的性能,因为垃圾邮件发送者通常会随机化URL,因此在新的垃圾邮件中再次看到任何特定URL的几率非常小。
  我们可以做如下处理:|   1. Lower-casing : 把整封邮件转化为小写。|   2. Stripping HTML: 移除所有HTML标签,只保留内容。|   3. Normalizing URLs : 将所有的URL替换为字符串 "httpaddr ".|   4. Normalizing Email Addresses: 所有的地址替换为 "emailaddr "|   5. Normalizing Dollars : 所有dollar符号($)替换为"dollar ".|   6. Normalizing Numbers: 所有数字替换为"number "|   7. Word Stemming(词干提取): 将所有单词还原为词源。例如,"discount", "discounts ", |   "discounted" and "discounting"都替换为"discount "。|   8. Removal of non-words : 移除所有非文字类型,所有的空格(tabs, newlines, spaces)|   调整为一个空格.
  |   %matplotlib inline|   import numpy  as np|   import matplotlib.pyplot as plt |   from scipy.io import loadmat|   from sklearn  import svm|   import re #regular expression  for e-mail processing|   # 这是一个可用的英文分词算法(Porter stemmer)|   from stemming .porter2 import stem|   # 这个英文算法似乎更符合作业里面所用的代码,与上面效果差不多|   import nltk, nltk.stem .porter
  |   def processEmail (email):|   """做出了Word Stemming和Removal of non-words 的所有处理"""|   email = email.lower() |   email = re.sub ("<[^<>]>", " ", email) # 匹配<开头,然后所有不是< ,> 的内容,直到>结|   尾,相当于匹配<...>|   email = re.sub("(http|https)://[^s]*", "httpaddr ", email ) # 匹配//后面不是空白字符的内|   容,遇到空白字符则停止|   email = re.sub("[^s]+@[^s]+", "emailaddr", email)|   email = re.sub("[$]+", "dollar ", email)|   email = re.sub("[d]+", "number", email)|   return email
  接下来就是提取词干,以及去除非字符内容。|   def email2TokenList(email):|   """预处理数据,返回一个干净的单词列表"""|   # I"ll use the NLTK stemmer because it more accurately duplicates  the|   # performance  of the OCTAVE  implementation in the assignment|   stemmer = nltk.stem.porter. PorterStemmer()|   email = preProcess(email)|   # 将邮件分割为单个单词,re.split() 可以设置多种分隔符|   tokens = re .split("[ @$/#.-:&*+=[]?!(){},"">_<;%]", email)|   # 遍历每个分割出来的内容|   tokenlist = []|   for token in tokens:|   # 删除任何非字母数字的字符|   token = re.sub ("[^a-zA-Z0-9]", "", token);|   # Use the Porter  stemmer to 提取词根|   stemmed = stemmer.stem(token)|   # 去除空字符串‘",里面不含任何字符|   if not len(token): continue |   tokenlist.append(stemmed)|   return tokenlist
  2.1.1 Vocabulary List(词汇表)
  在对邮件进行预处理之后,我们有一个处理后的单词列表。下一步是选择我们想在分类器中使用哪些词,我们需要去除哪些词。
  我们有一个词汇表vocab.txt,里面存储了在实际中经常使用的单词,共1899个。
  我们要算出处理后的email中含有多少vocab.txt中的单词,并返回在vocab.txt中的index,这就我们想要的训练单词的索引。|   def email2VocabIndices(email , vocab):|   """提取存在单词的索引"""|   token  = email2TokenList(email)|   index  = [i for i in range(len(vocab )) if vocab [i] in token ]|   return index
  2.2 Extracting Features from Emails|   def  email2FeatureVector(email):|   """|   将email转化为词向量,n是vocab的长度。存在单词的相应位置的值置为1,其余为0|   """|   df = pd.read_table ("data/vocab.txt",names=["words"])|   vocab = df.as _matrix() # return array |   vector = np.zeros (len(vocab)) # init vector|   vocab_indices = email2VocabIndices(email, vocab ) # 返回含有单词的索引|   # 将有单词的索引置为1|   for i in vocab_indices :|   vector[i] = 1|   return vector
  |   vector = email2FeatureVector(email )|   print("length of vector = {} num of non-zero = {}".format (len(vector), int(vector.sum())))|   length of vector  = 1899|   num of non-zero = 45
  2.3 Training SVM for Spam Classification
  读取已经训提取好的特征向量以及相应的标签。分训练集和测试集。|   # Training set|   mat1 = loadmat ("data/spamTrain.mat")|   X, y = mat 1["X"], mat1["y"]|   # Test set|   mat2 = scipy.io.loadmat ("data/spamTest .mat")|   Xtest, ytest  = mat2["Xtest"], mat2["ytest"]
  |   clf = svm.SVC(C=0.1, kernel="linear ")|   clf.fit(X, y)
  2.4 Top Predictors for Spam|   predTrain = clf.score (X, y)|   predTest = clf.score (Xtest, ytest)|   predTrain , predTest|   (0.99825, 0.989)
  到此这篇关于机器学习SVM支持向量机的练习文章就介绍到这了,更多相关机器学习内容请关注博主或继续浏览下面的相关文章,希望大家以后多多支持!

一根针一种治疗,立竿见影1急性腰椎痛穴位人中。特点开通闭塞,清热祛风。用针2寸针,在腰椎痛部位的对侧向迎香穴水平运针。方法站立位,进针1。5寸,轻轻用针刺激,直至患者感到疼痛。边捻针边让患者弯腰,至最大幅帕金森患者能不能喝牛奶很多人得了帕金森,不知道哪些东西能吃哪些不能吃,有的医生说得了帕金森不能喝牛奶,那么这是真的吗?卢顺义说,不能喝牛奶有一定道理,但是这句话不全对。卢顺义说,由于高蛋白饮食不利于抗帕买来的水果不够甜?2个方法让甜度翻倍,一般人我不告诉他1根据不同体质选择不同水果人有寒热中三性体质,水果也有寒热温凉之分。容易脾胃虚寒的人可多食龙眼荔枝杨梅桃椰子等温热性水果容易口干上火则可多食梨西瓜香蕉柚子芒果橙等寒凉性水果。2明确姆哈时代将取代梅罗时代?两大新王欧冠首轮携手梅开二度北京时间9月7日凌晨,欧冠首轮小组赛拉开帷幕,球迷们的狂欢之夜一触即发,作为两大新王,他们没有辜负球迷们的期望,用进球来回应了球迷,也回应了质疑。G组小组赛塞维利亚04曼城,H组巴都是混动,也都有电池包,但为何这些车领不了补贴也上不了绿牌?本文属电车百事通第2期相信许多人都有注意到这样一个问题,同样是混动,有些品牌的混动车可以上绿牌,不仅可以享受补贴优惠,还可以享受畅通无阻的政策,而恰恰相反,有些品牌的车,虽然也叫混成都车展演绎新能源车高光时刻上市首发新车占据半壁江山,车企瞄准差异化竞争每经记者裴健如每经编辑孙磊尽管受到疫情影响被暂时叫停,但第二十五届成都车展(即2022成都车展)依然成为国内今年首个如期开幕的A级车展。8月26日,2022成都车展在中国西部国际博满电跑518KM仅需52。5元,好养活又便宜合资大空间跨界家轿,微蓝6别克汽车品牌,在国内市场上的知名度也蛮高的,旗下产品丰富又强横,特别是GL8车型,在MPV市场独占鳌头。如今天各个厂商都在发展各自新能源汽车品牌,别克也顺势而为之,推出了微蓝车系,芯片荒电池荒中国新能源汽车还能引领全球吗?文刘文文今年上半年,在全球汽车产业整体下行的情况下,中国新能源汽车产业发展远超预期。上半年,中国新能源汽车销量260万辆,同比增长1。2倍,占全球市场份额近60,发展速度和市场规模维信诺不便回应供货华为Mate50屏幕,目前公司销量持续增长9月6日,维信诺尾盘异动拉升涨停,有消息称,华为Mate50系列将由国内OLED厂商维信诺和京东方供货柔性AMOLED屏幕。对此,相关人士称,关注(华为Mate50)发布会信息,不极氪001难以匹敌智己L7,智己L7深得消费者喜爱新能源汽车的崛起,意味着汽车行业将迎来大变革,燃油车的时代已经逐渐离开,新能源汽车成为汽车发展的主流方向,而众多车企也在此领域显示其实力,毕竟新能源汽车作为其弯道超车的机会,是占据通信行业分析通信为基础,赋能汽车新基建AIOT各行业(报告出品方作者长城证券,侯宾)一汽车板块处于历史估值底部,细分板块潜力巨大整体走势下降,通信板块跑赢大盘2022年初至7月31日,通信(申万)指数跌幅为9。83,在申万一级31个
索尼新专利通过动作捕捉帮助玩家保持健康的游戏姿势IT之家3月9日消息,根据国外科技媒体Appuals报道,索尼互动娱乐近期获得了一项技术专利,通过动作捕捉玩家在游戏时的状态,及时提醒玩家保持健康的姿势。图源TheGamerLea车谷赏梅好去处,带你遇见春日梅景风传花信,雨濯春尘,又到了闻香赏梅的好时节。立春后细雨绵绵,润物无声地催着梅花含蕾初放,不经意间,暗香涌动,2023年第一场花朵盛宴即将开放,梅花带来了春日气息,快来看看车谷有哪些春日里的中国贵州黔西晨雾缭绕菜花烂漫央广网毕节3月10日消息(记者任振国通讯员史开心)阳春三月,地处乌蒙山深处的贵州省毕节市黔西市洪水镇解放村油菜花竞相绽放,金黄色的油菜花与晨雾民居河流山峦相映成景,呈现出春意盎然的出境游有望在二季度逐步回升北京日报客户端记者潘福达3月7日,携程集团公布了截至2022年第四季度及全年未经审计的财务业绩。财报显示,2022年集团全年净营业收入为200亿元,同比保持稳定。2022年全年,归春秋假延期了,中小学生欢呼雀跃,家长哭笑不得,旅游业大赚特赚中小学生的假期安排一直是社会关注的话题。近日,全国人大代表梅亦建议,在全国范围内探索和推进中小学生春秋假制度。他认为,这样可以创造两个新的旅游小高峰,同时减少黄金假期旅游扎堆拥堵现张忆东今年A股当红炸子鸡是数字经济,央国企价值重估行情才刚开始来源投资作业本作者课代表核心观点1美债长端收益率近期的上升已经是强弩之末,美债10年期收益率目前4。1这个位置,大概率就是年内的高点附近。人民币将有望震荡升值,中国资产的吸引力将会汇丰晋信基金汇丰晋信价值先锋股票A年内净值上涨11。04汇丰晋信价值先锋股票A在2023年初至3月8日净值上涨11。04,跑赢业绩比较基准逾6个百分点,同类排名47862。汇丰晋信价值先锋股票成立于2018年11月,管理人为汇丰晋信基金DNF给你号都没胆量动?旭旭宝宝账号仓库道具,能价值一栋别墅作为国服第一红眼,旭旭宝宝前前后后,花了1个亿左右,打造出全身1718的装备。红眼账号金库内,珍藏了不少好东西,价值也非常昂贵。正因为价值连城,即便是把账号密码给你,谁有胆量去动这坐火车去吉隆坡旅游马来西亚民众期待马东铁早日通车来源新华网这是3月6日在马来西亚彭亨州拍摄的马来西亚东海岸铁路(马东铁)关丹隧道施工现场附近设立的野生动物穿越通道。新华社发(张纹综摄)新华社吉隆坡3月7日电通讯坐火车去吉隆坡旅游神奇动物在哪里寻找城市里的动物邻居们如果要给春天一个关键词生命一定是其中之一告别漫长的冬天这座城市再次充满生机小动物们在浓浓春意中歌颂着温暖与自由让我们跟着和煦的春风去拜访城市里的动物邻居们当暖风吹过芙蓉湖大唐芙蓉园云南独一无二的景点,现实版的移动城堡,快来实现童年梦!云南丽江,多么美丽的城市啊!在这个旅游大规模发展的时期,云南似乎成为了一个旅游的绝佳城市。不仅仅是因为天气的合适,更是因为风景的美丽。选一个风和日丽的天气,和三五好友共同呼吸另一个