lesson x

先讲明白第一个问题:
线程被创建出来后,并没有运行。
创建后调用start()方法,也没有立刻运行,而是变为了可运行的状态。
所有线程都是可运行的状态,坐在等待席,等待CPU大人叫号,叫到的运行,没叫到的等着。

被CPU大人选中后,正在占用CPU的人,状态是正在运行。但是CPU不会让你待太久,考虑到其他等待席上的线程的心情。CPU会频繁的将等待席中的线程叫进来,让它运行会。
从CPU上被换下的线程,状态又变为可运行,等待再次叫号。

调用线程的yield()方法,就相当于学雷锋,告诉CPU大人,这个线程不急,下次叫号的时候,优先考虑其他线程。


运行完的线程,状态变为中止。
如果线程运行中,产生了异常,则线程也会结束,状态变为中止。


线程在运行过程中,有可能需要等待其他线程的状况。
比如,有一个线程占用了一个同步化的对象,它会上个锁。
那么其他线程需要访问这个对象时,就会需要等待,等它用完后,把锁释放出来,其他线程才能继续进入可运行状态。

调用某个线程的join()方法,相当于要强行等待某个线程先完成。通常用于,明确的知道某线程必须要先执行完,才能执行的情况。

可以调用Thread.sleep()方法,强行让自己等待一段时间,再次进入可运行状态。


如果多个线程同一时刻,同时调用了一个对象的方法,或者修改了一个对象的属性,这就会产生问题。
所以我们需要有个语法,让某个对象的某个方法,或者某段代码,同一时间,只能有一个线程能进来。其他的都带等着。这就是同步,synronized。


但是这又带来一个问题,就是如果进入到synronized的线程,运行过程中,需要获得某个条件才能继续下去。而能改变这个条件的线程,恰好又是等待进入该synronized的,这就会出现A等B开口,B等A开口的死锁情况。
在synroized代码块中,可以通过调用锁对象的wait()方法,把锁释放出来,让其他想进入synroized的线程获得运行的机会。当其他线程运行的差不多了,可以调用notify()方法,唤醒其他等待线程。
GridSearchCV是scikit-learn库中的一个工具,用于超参数调优。它通过穷举搜索的方式,尝试所有可能的超参数组合,并使用交叉验证来评估每组超参数的性能,从而找到最佳的超参数组合。以下是GridSearchCV的一些关键点: 1. **超参数调优**:超参数是模型在训练前需要设置的参数,例如KNN算法中的k值、决策树的最大深度等。GridSearchCV通过尝试不同的超参数组合来找到最佳组合。 2. **交叉验证**:GridSearchCV使用交叉验证来评估每组超参数的性能。交叉验证将数据集分成若干份,轮流用其中的一份作为测试集,其余的作为训练集,最终取所有评估结果的平均值作为性能指标。 3. **参数网格**:需要定义一个参数网格(param_grid),即所有可能的超参数组合。GridSearchCV会遍历这个网格中的所有组合。 4. **结果分析**:GridSearchCV会返回一个包含所有评估结果的字典,可以通过`cv_results_`属性访问这些结果。 以下是一个使用GridSearchCV进行超参数调优的示例: ```python from sklearn.model_selection import GridSearchCV from sklearn.neighbors import KNeighborsClassifier from sklearn.datasets import load_iris from sklearn.metrics import accuracy_score # 加载数据集 iris = load_iris() X = iris.data y = iris.target # 定义模型 knn = KNeighborsClassifier() # 定义参数网格 param_grid = { 'n_neighbors': [3, 5, 7, 9], 'weights': ['uniform', 'distance'], 'metric': ['euclidean', 'manhattan'] } # 定义GridSearchCV grid_search = GridSearchCV(knn, param_grid, cv=5, scoring='accuracy') # 训练模型 grid_search.fit(X, y) # 输出最佳参数 print("Best parameters:", grid_search.best_params_) # 使用最佳参数进行预测 best_knn = grid_search.best_estimator_ y_pred = best_knn.predict(X) # 评估模型 accuracy = accuracy_score(y, y_pred) print("Accuracy:", accuracy) ``` 在这个示例中,我们使用了KNN算法,并通过GridSearchCV尝试了不同的k值、权重和距离度量方法。最终,我们输出了最佳参数组合,并使用这些参数进行预测和评估。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值